2012-06-17 15 views
5

Voglio eseguire il programma creato direttamente dopo la compilazione, in modo da poter creare e avviare il mio programma con scons.scons - programma in esecuzione dopo la compilazione

Ho pensato che questo SConstruct-File, avrebbe avviato il programma, ogni volta che è stato ricostruito.

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

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

E questo sarebbe avviarlo, ogni volta che faccio funzionare scons

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

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

Ma entrambi non funzionano, il mio programma non viene mai eseguito. Che cosa sto facendo di sbagliato?

risposta

7

Questo dovrebbe funzionare meglio per eseguire il programma solo quando è stato creato.

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

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

e utilizzare l'AlwaysBuild() per eseguire ogni volta, come detto da @doublep come questo:

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

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

E se si desidera visualizzare il contenuto della testoutput, si potrebbe fare questo :

(. Assumendo Linux sarebbe più portatile per stampare il file con un po 'di codice Python, invece)

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

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

Quando uso '#' in action e source, il testoutput non viene più generato. scons stampa '#/main> testoutput' ma' testoutput' non esiste e quindi stampa sempre questa linea. C'è un modo per avere questo, senza scrivere questo a testoutput invece di stdout? Voglio vedere immediatamente i risultati e non voglio esaminare questo file. – dinfuehr

+0

@dinfuehr, non sarò in grado di testare questo fino a domani mattina. La mia soluzione funziona per te usando "./main" senza "#"? Non capisco la tua domanda su stdout. – Brady

+0

Sì, senza # funziona. Volevo sapere se è possibile, avere l'azione del tipo "./ main "only (senza"> $ TARGET ") in modo da visualizzare direttamente l'output del programma quando si chiama scons, senza dover esaminare il file di output. – dinfuehr

4

Questo viene eseguito ogni volta che ls SCons viene eseguito:

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

hai mai detto SCons perché e quando si dovrebbe eseguire il comando. Dovresti ad es. aggiungilo come dipendenza ad un altro target o rendilo come target predefinito.

Se si desidera eseguire il comando in realtà sempre, vale a dire indipendentemente da quale obiettivo viene creato, è consigliabile eseguirlo utilizzando le strutture standard di Python per l'avvio di programmi esterni.

+0

Come posso eseguire il mio programma solo dopo che è stato ricostruito? (Esegui sempre il mio programma, ora funziona per me) – dinfuehr

+0

Fai in modo che il comando dipenda dal programma. Quindi l'eseguibile verrà ricostruito (se necessario) prima di essere eseguito. Cioè 'x_program = Programma ('x', ...); x = Comando ('x', Nessuno, './x'); Depends ('x', x_program) ' – doublep

+0

Hmm, questo non funziona per me:' Sono stati specificati più modi per creare lo stesso target per: x' – dinfuehr

Problemi correlati