2011-01-13 14 views
3

Ich versuche, SCons zu verwenden, um ein Programm zu kompilieren, das eine Reihe von Abhängigkeiten erfordert, die ich an einem nicht standardmäßigen Speicherort installiert habe.SCons - Headers/Libraries an einem nicht standardmäßigen Speicherort

Ich habe die Abhängigkeiten in/home/dja/ocr installiert. Jetzt versuche ich das Hauptprogramm zu kompilieren und kann nicht herausfinden, wie ich SCons sagen soll, wo ich nach den Bibliotheken und Kopfzeilen suchen soll.

Ich habe versucht (ua):

scons prefix=/home/dja/ocr 

scons includepath=/home/dja/ocr/include libpath=/home/dja/ocr/lib 

env LIBPATH=/home/dja/ocr/lib INCLUDEPATH=/home/dja/ocr/include scons 

...etc... 

Die Ergebnisse sind immer die gleichen:

scons: Reading SConscript files ... 
Currently supported OS version: Ubuntu 10.04 
Checking for C++ library iulib... no 
AssertionError: : 
    File "/home/dja/ocr/src/ocropus/SConstruct", line 107: 
    assert conf.CheckLibWithHeader("iulib","iulib/iulib.h","C++"); 

Ich habe nicht in der Lage gewesen, eine Antwort auf Google zu finden.

Was ist die richtige SCONS foo, um dies zum Funktionieren zu bringen?

Antwort

3

Anders als bei make und seine Konventionen für bestimmte Umgebungsvariablen oder die --with-X Optionen zu konfigurieren, der Autor des SConstruct muss eine Möglichkeit für einen Benutzer bieten, Überschreibungen anzugeben. Standardmäßig liest scons keine Buildvariablen aus der Umgebung.

Es gibt verschiedene Möglichkeiten, die Benutzerkonfiguration zu handhaben (siehe Variables, die ich gerade erfahren habe), aber mir sind keine allgemein anerkannten Konventionen bekannt. Und für den Benutzer in Ihrer Position, müssen Sie sich auf den Autor bauen Build-Dokumentation oder eine anständige Beschreibung verlassen, oder greifen Sie auf die SConstruct selbst (die Sie manchmal mit schlecht geschriebenen unkonventionellen Makefiles zurückgreifen müssen).

BTW, ich würde mich freuen, hier korrigiert zu werden, wenn mein Wissen über scons veraltet ist.

0

Es scheint, es ist möglich, dies zu tun, indem Sie die SConstruct Datei bearbeiten: http://osdir.com/ml/programming.tools.scons.user/2005-09/msg00060.html

Diese ziemlich lahm ist - gibt es eine bessere allgemeine Art und Weise?

(In diesem Fall zeigte die SConstruct Datei zu lesen gibt einen Pfad zur Abhängigkeit speziell für die Bereitstellung einer Sondervorschrift war also habe ich das unmittelbare Problem, aber nicht das allgemeine man gelöst.)

4

Sie benötigen eine Umgebung, und stellen entsprechende Variablen erstellen:

env = Environment(
      CPPPATH=['/home/dja/ocr/include'], 
      LIBPATH=['/home/dja/ocr/lib'], 
      LIBS=['iulib']) 
env.Program('my_executable', Glob('*.c')) 

Die CPPPATH verweist auf eine Liste von C Pre-Processor-Pfade (Hinweis: 3 P). LIBPATH zeigt auf wo sich Ihre Bibliotheken befinden. Schließlich ist LIBS eine Liste von Bibliotheken, die mit Ihrem Programm verknüpft werden.

0

Ich fand LINKPATH = "- L/blah /" als Umgebungsvariable zu scons gearbeitet, wenn LDFLAGS übergeben = "- L/blah /" nicht.

0

sudo scons - 32 --libpath =/home/test/projekt/stage/lib/--cpppath =/home/test/project/boost/--prefix =/home/test/mongClient/ausgang - -dbg = on --opt = bei der Installation

Der libpath dient zum Verknüpfen der Bibliothek von einem nicht standardmäßigen Speicherort. cpppath dient zum Einschließen der Headerdateien von einem nicht standardmäßigen Speicherort.