2011-10-09 12 views
6

Estoy tratando de modificar mis archivos SCons para que pongan los archivos generados en un directorio de compilación . Inicialmente pensé que VariantDir podría ser una opción, pero a juzgar por todo lo que he leído y los ejemplos, no hago lo que quiero.SCons Salida en el directorio de compilación

¿Hay alguna manera fácil de obligar a SCons a colocar la salida en un directorio determinado sin tener que volver a escribir todas las fuentes y secuencias de comandos?

+0

Cuál es el problema con 'VariantDir'? ¿Intentó usar 'duplicate = 0'? –

+0

Para usar 'VariantDir' tienes que vender tu alma entera. Lo que significa que debes hacer todo en el 'VariantDir' o nada. Lo que yo y muchos otros queremos es poner solo cosas ** generadas ** en el directorio de compilación y no todo. – abergmeier

+0

¿No es eso lo que 'duplicate = 0' hace? De los documentos: La duplicación del árbol fuente puede desactivarse configurando el argumento duplicado en 0 (cero). Esto provocará que scons invoque a los constructores que utilizan los nombres de ruta de los archivos fuente en src_dir y los nombres de ruta de los archivos derivados dentro de variant_dir. –

Respuesta

0

Afronté una frustración similar, agregué un site_scons que agregaba constructores de reemplazo (por ejemplo, "Exe" en lugar de "Programa") y especificaba un emisor para ese constructor que reemplazó la porción de ruta con el directorio de compilación. Sin embargo, esto requiere el uso del generador alternativo en todos los SConscripts.

De forma alternativa, podría tratar de subclasificar el entorno y volver a escribir los objetivos principales para usar reescrituras de destino. Luego especifica su Entorno como el predeterminado (modificando Scons.Script.DefaultEnvironment o algo así). Este enfoque mantuvo los SConscripts estáticos pero se volvió muy desordenado y requiere más mantenimiento a medida que cambian las partes internas de Scons.

0

El uso de VariantDir con duplicate=0 debería funcionar.

+0

Esto me requeriría reescribir la mayoría de los scripts de compilación. – abergmeier

0

Puede utilizar Install or InstallAs en la salida de destino. Esto funciona para mi.

lib = env.SharedLibrary(target = "some_target", source = sources); 
env.InstallAs(target = "folder/output_name.ext", source = lib); 
2

Después de luchar con VariantDir por un tiempo (que no estaba haciendo nada en absoluto), que terminé usando variant_dir parámetro en la llamada nivel SConscript superior, lo que hace que todas las salidas de construcción aguas abajo terminan en un paralelo ' árbol de compilación: SConscript(['subdirs/SConscript'], variant_dir='build', duplicate=0) Mi estructura de compilación es una jerarquía de SConscripts en subdirectorios/subdirectores, etc. Con esta llamada, los resultados terminan en compilación/subdirecciones en el mismo nivel que en la fuente.

Esto come un nivel, sin embargo (subdivisiones), y el uso de "../build" no ayuda. La solución es tener un archivo SConscript al mismo nivel que SConstruct y llame SConscript(['SConscript'], variant_dir='build', duplicate=0)

Véase también Force Scons output (exe, obj, lib & dll) to specific build directory - tiene una respuesta similar

Cuestiones relacionadas