2009-11-19 21 views
8

Ho usato cmake per creare i miei progetti fuori dal codice sorgente, il che è molto comodo in quanto si evita di inquinare la directory di origine con file non necessari.Fuori dalla build di origine con scons?

Supponendo che la CMakeLists.txt è nella directory corrente, questo potrebbe essere fatto come segue:

mkdir build 
cd build 
cmake .. 
make 

Come posso fare lo stesso in scons?

risposta

9

Nel file SConstruct, si utilizza un dir variante:

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

Poi nel main.scons si imposta tutto come al solito:

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

E 'possibile fare questo senza hardcoding dir variante in the SConstruct di (ab) usando repository, ma quell'approccio ha i suoi bug. Per la cronaca, si dovrebbe eseguire quanto sopra nel seguente modo per costruire in un'altra directory:

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

Il metodo più semplice e più praticabile è quella di utilizzare solo variant_dir. Quindi esegui questo come al solito dalla directory di origine di livello superiore. Tutti gli artefatti di costruzione vengono prodotti nella sottodirectory build.

In risposta al commento JesperE s', ecco come si potrebbe scrivere lo SConstruct livello superiore per aggiungere una directory di compilazione opzionalmente nome:

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

Poi si potrebbe chiamare questo dalla riga di comando come segue, per creare una directory di build chiamata "baz":

$ scons --build=baz 
+0

Ma non si può semplicemente passare il valore del parametro 'variant_dir' come argomento della riga di comando per evitare di codificarlo? – JesperE

+0

Puoi, ma devi ricordarti di passarlo ogni volta alla riga di comando di 'scons'. – richq

Problemi correlati