2012-06-17 9 views
5

Quiero ejecutar el programa construido directamente después de la compilación, para que pueda construir e iniciar mi programa con scons.scons - ejecutar el programa después de la compilación

Pensé que este SConstruct-File, iniciaría el programa, siempre que sea reconstruido.

main = Program("main", [ "main.cc" ]) 

test = Command(None, None, "./main >testoutput") 
Depends(test, main) 

Y esto sería iniciarlo, cada vez que ejecute scons

main = Program("main", [ "main.cc" ]) 

test = Command(None, None, "./main >testoutput") 
Requires(test, main) 

Pero ambos no funcionan, mi programa no se ejecuta nunca. ¿Qué estoy haciendo mal?

Respuesta

7

Esto debería funcionar mejor para ejecutar el programa solo cuando está construido.

main = Program("main", [ "main.cc" ]) 

test = Command(target = "testoutput", 
       source = "./main", 
       action = "./main > $TARGET") 
Depends(test, main) 

Y el uso de la AlwaysBuild() para ejecutarlo cada vez que, según lo mencionado por @doublep así:

main = Program("main", [ "main.cc" ]) 

test = Command(target = "testoutput", 
       source = "./main", 
       action = "./main > $TARGET") 
AlwaysBuild(test) 

Y si desea ver el contenido de la testoutput, usted puede hacer esto :

(. Suponiendo Linux sería más portátil para imprimir el archivo con algo de código Python lugar)

main = Program("main", [ "main.cc" ]) 

test = Command(target = "testoutput", 
       source = "./main", 
       action = ["./main > $TARGET", 
          "cat $TARGET"]) 
AlwaysBuild(test) 
+0

Cuando uso '#' en acción y fuente, la salida de prueba ya no se genera. scons imprime '#/main> testoutput' pero' testoutput' no existe, por lo que siempre imprime esta línea. ¿Hay alguna manera de tener esto, sin escribir esto para probar la salida en lugar de stdout? Quiero ver los resultados de inmediato y no quiero mirar este archivo. – dinfuehr

+0

@dinfuehr, no podré probar esto hasta mañana por la mañana. ¿Mi solución funciona para usted usando "./main" sin el "#"? No entiendo tu pregunta sobre stdout. – Brady

+0

Sí, sin # funciona. Quería saber si es posible, tener la acción como "./ main "only (without the"> $ TARGET ") para que vea la salida del programa directamente al llamar a scons, sin tener que inspeccionar el archivo de salida. – dinfuehr

4

Esto va en ls cada vez que se ejecuta SCons:

ls = Command ('ls', None, 'ls') 
AlwaysBuild ('ls') 
Default ('ls') 

Nunca dijiste SCons por qué y cuándo se debe ejecutar el comando. Deberías, por ejemplo, agréguelo como una dependencia a algún otro objetivo o conviértalo en el objetivo predeterminado.

Si desea ejecutar el comando realmente siempre, es decir, independientemente del objetivo que se está creando, probablemente debe ejecutarlo utilizando las instalaciones estándar de Python para el lanzamiento de programas externos.

+0

¿Cómo puedo ejecutar mi programa solo después de que fue reconstruido? (Siempre ejecutando mi programa, ahora funciona para mí) – dinfuehr

+0

Haga que el comando dependa del programa. Luego, el ejecutable será reconstruido (si es necesario) antes de ejecutarse. Es decir. 'x_program = Program ('x', ...); x = Comando ('x', Ninguno, './x'); Depende ('x', x_program) ' – doublep

+0

Hmm, esto no funciona para mí:' Se especificaron varias formas de construir el mismo objetivo para: x' – dinfuehr

Cuestiones relacionadas