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
8
A
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.
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. –
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'. –
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. –