2011-08-17 15 views
8

Voglio eseguire un comando in SCons che non ha alcun file di input/output (in realtà l'input e l'output sono lo stesso file). Al momento sto semplicemente eseguendolo manualmente con il sottoprocesso.Popen ma c'è un modo più sconsiderato di farlo?Esegui un comando in SCons senza dipendenze

risposta

13

È possibile utilizzare la funzione Command per eseguire qualsiasi comando esterno eseguito tramite Popen ed è possibile utilizzare la funzione AlwaysBuild per garantire che il comando venga sempre eseguito anche se il file di destinazione esiste. Scons non ama i cicli di dipendenza, quindi lascia vuoto l'elenco dei sorgenti.

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

Lo scons wiki ha anche una ricetta per PhonyTargets che lo rende facile impostare un sacco di semplici comandi.

+0

Se esiste già una regola per creare "myfile.out", si lamenta che esistono diversi modi per creare il target. Voglio avere una regola per creare il file e un'altra per modificarla. –

+0

Penso che avere due regole per un obiettivo sia una cattiva idea. Come fa lo scons a sapere se la regola "modifica" è stata invocata se il bersaglio esiste? Funzionerà meglio se hai due obiettivi, uno per ogni regola. O avere una regola che esegue sia le azioni 'create' che 'modify'. –

+0

Presta attenzione ai documenti scons dove afferma che "AlwaysBuild" è un nome fuorviante. Ci sono ancora alcune valutazioni di scons di regole prima di emettere effettivamente il comando. –

Problemi correlati