2009-11-19 11 views
8

Ich habe Cmake verwendet, um meine Projekte aus der Quelle zu erstellen, was wirklich praktisch ist, da Sie Ihr Quellverzeichnis nicht mit unnötigen Dateien verschmutzen.Out of Source Build mit SCONS?

die CMakeLists.txt Unter der Annahme, ist im aktuellen Verzeichnis, das geschehen könnte wie folgt:

mkdir build 
cd build 
cmake .. 
make 

Wie kann ich das gleiche tun in scons?

Antwort

9

In Ihrer SConstruct Datei verwenden Sie eine Variante dir:

SConscript("main.scons", variant_dir="build", duplicate=0) 

Dann in main.scons setzen Sie alles wie gewohnt:

env = Environment() 
env.Program(target='foo', source=Split('foo.c bar.c')) 

Es ist möglich, dies zu tun, ohne hartzucodieren die Variante dir in die SConstruct durch (ab) Verwendung von Repositories, aber dieser Ansatz hat seine Fehler. Für das Protokoll, würden Sie die oben laufen, wie in einem anderen Verzeichnis zu bauen folgt:

mkdir mybuild 
cd mybuild 
scons -Y .. -f ../main.scons 

Die einfachste und bearbeitbar ist nur variant_dir zu verwenden. Sie führen dies dann wie gewohnt im Quellverzeichnis der obersten Ebene aus. Alle Build-Artefakte werden im Unterverzeichnis build erstellt.

Als Reaktion auf JesperE ‚s Kommentar, hier ist, wie Sie die Top-Level-SConstruct schreiben könnte eine optional benannte Build-Verzeichnis hinzuzufügen:

AddOption('--build', default='build') 
SConscript("main.scons", variant_dir=GetOption('build'), duplicate=0) 

Dann Sie diese von der Kommandozeile aufrufen würde, wie folgt zu Erstellen Sie ein Build-Verzeichnis mit dem Namen "baz":

$ scons --build=baz 
+0

Aber können Sie nicht einfach den Wert des Parameters 'variant_dir' als Befehlszeilenargument übergeben, um eine Hardcoding zu vermeiden? – JesperE

+0

Sie können, aber Sie müssen daran denken, es jedes Mal an die 'Scons' Kommandozeile zu übergeben. – richq