2009-11-19 17 views
8

He estado usando cmake para construir mis proyectos fuera de la fuente, lo cual es muy conveniente ya que evita contaminar el directorio de origen con archivos innecesarios.Construir fuera de la fuente con scons?

Suponiendo que el CMakeLists.txt está en el directorio actual, esto podría hacerse de la siguiente manera:

mkdir build 
cd build 
cmake .. 
make 

¿Cómo puedo hacer lo mismo en scons?

Respuesta

9

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

¿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

+0

Puedes hacerlo, pero debes recordar pasarlo a la línea de comando 'scons' cada vez. – richq

Cuestiones relacionadas