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
Aber können Sie nicht einfach den Wert des Parameters 'variant_dir' als Befehlszeilenargument übergeben, um eine Hardcoding zu vermeiden? – JesperE
Sie können, aber Sie müssen daran denken, es jedes Mal an die 'Scons' Kommandozeile zu übergeben. – richq