2011-08-17 8 views
8

Quiero ejecutar un comando en SCons que no tiene ningún archivo de entrada/salida (en realidad, la entrada y la salida son el mismo archivo). Por el momento, solo lo estoy ejecutando manualmente con subproceso.Popen pero ¿hay una forma más SConsy de hacerlo?Ejecutar un comando en SCons sin dependencias

Respuesta

13

Puede usar la función Command para ejecutar cualquier comando externo que ejecute mediante Popen, y puede usar la función AlwaysBuild para asegurarse de que su comando siempre se ejecute incluso si el archivo de destino existe. A Scons no le gustan los ciclos de dependencia, por lo tanto, deje la lista de fuentes vacía.

myfile = env.Command('myfile.out', [], 'echo Hello world > $TARGETS') 
env.AlwaysBuild(myfile) 

El scons wiki también tiene una receta para PhonyTargets que hace que sea fácil de configurar una gran cantidad de órdenes sencillas.

+0

Si ya existe una regla para compilar 'myfile.out', entonces se queja de que existen múltiples formas de compilar el objetivo. Quiero tener una regla para crear el archivo y otra para modificarla. –

+0

Creo que tener dos reglas para un objetivo es una mala idea. ¿Cómo sabe scons si la regla 'modificar' ha sido invocada si el objetivo existe? Funcionará mejor si tiene dos objetivos, uno para cada regla. O tiene una regla que realiza las acciones 'crear' y 'modificar'. –

+0

Preste atención a los documentos de scon donde dice 'AlwaysBuild' es un nombre engañoso. Todavía hay algunas reglas que Scons evalúa antes de emitir realmente el comando. –

Cuestiones relacionadas