Dans votre fichier SConstruct
, vous utilisez une variante dir:
SConscript("main.scons", variant_dir="build", duplicate=0)
Puis, en main.scons
vous configurez tout comme d'habitude:
env = Environment()
env.Program(target='foo', source=Split('foo.c bar.c'))
Il est possible de le faire sans hardcoding la variante dir dans le SConstruct par (ab) en utilisant des dépôts, mais cette approche a ses bugs. Pour l'enregistrement, vous courriez ci-dessus comme suit pour construire dans un autre répertoire:
mkdir mybuild
cd mybuild
scons -Y .. -f ../main.scons
Le est d'utiliser simplement la plus simple et la plus pratique variant_dir
. Vous exécutez ensuite comme d'habitude à partir du répertoire source de premier niveau. Tous les artefacts de construction sont produits dans le sous-répertoire build
.
En réponse au commentaire de JesperE, voici comment vous pouvez écrire le niveau supérieur SConstruct pour ajouter un répertoire de construction en option nommée:
AddOption('--build', default='build')
SConscript("main.scons", variant_dir=GetOption('build'), duplicate=0)
Ensuite, vous appelez cela de la ligne de commande comme suit, créer un répertoire de construction appelé "baz":
$ scons --build=baz
Mais vous ne pouvez pas simplement passer la valeur du paramètre 'variant_dir' comme argument de ligne de commande pour éviter de le coder en dur? – JesperE
Vous pouvez, mais vous devez vous rappeler de le passer à la ligne de commande 'scons' à chaque fois. – richq