2010-06-07 8 views
5

actualmente estoy intentando transportar un proyecto heredado de un millón de sloc desde scripts .cmd aburridos a SCons. Algunas partes son VC++, otras son Delphi. Crear SConscripts para las piezas de C++ fue muy fácil.¿Cómo puedo forzar al creador de SConscript a cambiar el directorio?

Para construir la parte delphi escribí un constructor muy simple que detecta si se trata de un programa o proyecto de biblioteca. Llamar al constructor después de encadenar a través de SConscript hace que scons llame a dcc32 $ subdir/project.dpr lo que induce a dcc32 a buscar unidades en el directorio actual en lugar de $ subdir.

¿Hay alguna manera de decirle a scons que ingrese $ subdir antes de ejecutar los comandos que residen en el scriptcript o debería arreglarlo dentro del constructor?

gracias de antemano

Respuesta

5

SCons ya cambios en el directorio de SConscripts subdirectorio al leerlos, lo que parece que el problema se va a tener que ser fijada en el generador real.

Una vez que las secuencias de comandos se analizan y SCons ejecuta los comandos de compilación, permanece en el directorio de nivel superior. Los comandos se emiten usando nombres de ruta relativos a ese directorio de nivel superior. La forma de cambiar este comportamiento es usar la palabra clave chdir en su Creador.

El ejemplo de la página scons hombre es el siguiente:

b = Builder(action='build < ${SOURCE.file} > ${TARGET.file}', 
      chdir=1) 
env = Environment(BUILDERS = {'MyBuild' : b}) 
env.MyBuild('sub/dir/foo.out', 'sub/dir/foo.in') 

es necesario especificar el componente .file como el uso de chdir no cambia los nombres pasados ​​al constructor, es decir, que todavía son en relación con el directorio de nivel superior.

+0

Esa es exactamente la combinación que he necesitado. Tu solución solucionó mi problema. ¡Muchas gracias! – Damg

Cuestiones relacionadas