En el archivo SConstruct
, se utiliza una variante dir:
SConscript("main.scons", variant_dir="build", duplicate=0)
Luego, en main.scons
configura todo como de costumbre:
env = Environment()
env.Program(target='foo', source=Split('foo.c bar.c'))
Es posible hacer esto sin codificar el directorio variante en SConstruct mediante (ab) el uso de repositorios, pero ese enfoque tiene sus errores. Para el registro, debe ejecutar lo anterior de la siguiente manera para construir en otro directorio:
mkdir mybuild
cd mybuild
scons -Y .. -f ../main.scons
El más fácil y más viable es utilizar sólo variant_dir
. A continuación, ejecuta esto como de costumbre desde el directorio de origen de nivel superior. Todos los artefactos de compilación se producen en el subdirectorio build
.
En respuesta al comentario JesperE 's, aquí es cómo se puede escribir la SConstruct nivel superior para añadir un directorio de construcción opcionalmente con nombre:
AddOption('--build', default='build')
SConscript("main.scons", variant_dir=GetOption('build'), duplicate=0)
allí tendría que llamar a esto desde la línea de comandos de la siguiente manera, a cree un directorio de compilación llamado "baz":
$ scons --build=baz
¿Pero no puede simplemente pasar el valor del parámetro 'variant_dir' como un argumento de línea de comandos para evitar la codificación de la misma? – JesperE
Puedes hacerlo, pero debes recordar pasarlo a la línea de comando 'scons' cada vez. – richq