2009-11-19 5 views
8

J'ai utilisé cmake pour construire mes projets hors de la source, ce qui est très pratique car vous évitez de polluer votre répertoire source avec des fichiers inutiles.Hors de la compilation avec scons?

En supposant que le CMakeLists.txt est dans le répertoire courant, cela pourrait se faire comme suit:

mkdir build 
cd build 
cmake .. 
make 

Comment puis-je faire la même chose en scons?

Répondre

9

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 
+0

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

+0

Vous pouvez, mais vous devez vous rappeler de le passer à la ligne de commande 'scons' à chaque fois. – richq