2017-09-27 4 views
0

Ich bin Tring eine Quelldatei zu erzeugen und die erzeugte Datei verwenden zu kompilieren ..SCons versagt Datei generiert finden

gen = env.Command("/tmp/dummy", "demo.json","demo.py $SOURCE > $TARGET") 
env.AlwaysBuild(gen) 

bin=env.Program(target='demo', source=[Glob("*.cc")]) 
env.Depends(bin, gen) 

die gen wird demo.cc erforderlich erzeugen

gen = env.Command ("/ tmp/dummy", "demo.json", "demo.py $ SOURCE> $ TARGET")

Aber Fehler, wenn Demo Kompilieren Sie wie folgt vor:

fehlgeschlagen: Quelle demo.o '.

Durch ls demo.cc bin ich sicher, dass die erforderliche Datei demo.cc tatsächlich im richtigen Verzeichnis generiert wird.

Die Ursache sollte etwas mit Abhängigkeit sein. Beachten Sie, dass ich explizite Abhängigkeit der Bin auf demo.cc. Immer noch fehlgeschlagen.

Irgendwelche Ideen warum?

===== ===== Weitere Details

Jeder bereinigter Build, das heißt scons -c & & scons -j4 arbeitet. Aber das Erstellen eines Nachworts schlägt selbst mit der Datei demo.cc fehl.

Antwort

1

Sie sagen SCons, dass das Ergebnis (= Ziel) Ihre env.Command() ist "/tmp/dummy". Versuchen

gen = env.Command("demo.cc", "demo.json","demo.py $SOURCE > $TARGET") 

stattdessen zu verwenden, so dass SCons automatisch die Abhängigkeit abholen können. Sie benötigen nicht die explizite Depends().

+0

Das Problem ist, dass demo.cc nicht die Ausgabe von demo.py ist. demo.py erzeugt intern viele Dateien, demo.cc ist einer von ihnen. – FaceBro

+1

Und wie erwarten Sie, dass SCons das wissen? Was Sie eigentlich brauchen, ist ein Emitter, der alle von Ihrem Befehl erzeugten Zieldateien zurückgibt. Sehen Sie sich unseren [ToolsForFools Guide] (https://bitbucket.org/scons/scons/wiki/ToolsForFools) an, wo Sie ein Beispiel dafür finden können. – dirkbaechle

+0

wird später überprüfen. Was ist das Problem meiner derzeitigen Methode? Ich benutze immer und hängt ab, um die Abhängigkeit explizit anzugeben, immer noch nicht funktioniert? – FaceBro