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
Ma non si può semplicemente passare il valore del parametro 'variant_dir' come argomento della riga di comando per evitare di codificarlo? – JesperE
Puoi, ma devi ricordarti di passarlo ogni volta alla riga di comando di 'scons'. – richq