2011-08-17 15 views
8

Chcę uruchomić polecenie w SCons, który nie ma żadnych plików wejściowych/wyjściowych (faktycznie dane wejściowe i wyjściowe są tego samego pliku). W tej chwili jestem po prostu ręcznie uruchomiony z podprocesu.Popen, ale czy istnieje więcej sposób SCONSy to zrobić?Uruchom polecenie w SCons bez zależności

Odpowiedz

13

Możesz użyć funkcji Command, aby uruchomić dowolne polecenie zewnętrzne uruchamiane przez Popen, i możesz użyć funkcji AlwaysBuild, aby upewnić się, że polecenie jest zawsze uruchamiane, nawet jeśli plik docelowy istnieje. Scons nie lubi cykli zależności, więc pozostaw listę źródłową pustą.

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

Wiki scons ma również przepis na PhonyTargets co sprawia, że ​​łatwo skonfigurować wiele prostych poleceń.

+0

Jeśli istnieje już reguła do budowania "myfile.out", to narzeka, że ​​istnieje wiele sposobów na zbudowanie celu. Chcę mieć jedną regułę do utworzenia pliku, a drugą do modyfikacji. –

+0

Myślę, że posiadanie dwóch reguł dla jednego celu jest złym pomysłem. W jaki sposób scons wie, czy reguła "modyfikuj" została wywołana, jeśli cel istnieje? Będzie działać lepiej, jeśli masz dwa cele, po jednym dla każdej reguły. Lub miej jedną regułę, która wykonuje zarówno akcje "twórz", jak i "modyfikuj". –

+0

Należy zwrócić uwagę na dokumenty scons, w których podano "AlwaysBuild" to nazwa wprowadzająca w błąd. Przed wydaniem komendy nadal istnieje kilka reguł scons. –

Powiązane problemy