2017-09-27 70 views
0

我特林生成一些源文件,並使用生成的文件進行編譯..SCons的未能找到生成的文件

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) 

的創會生成所需demo.cc

根=

01:env.Command( 「/ tmp目錄/空」, 「demo.json」, 「demo.py $ SOURCE> $ TARGET」)

但在編譯時演示如下得到錯誤

失敗:來源demo.cc' not found, needed by target demo.o'。

通過ls demo.cc,我確定所需的文件demo.cc確實是在正確的目錄中生成的。

原因應該是依賴性的東西。注意到我指定了demo.cc上bin的顯式依賴關係。仍然失敗。

任何想法爲什麼?

=====更多細節=====

每一個乾淨的構建,即scons的-c & & scons的-j4,工作。但即使在demo.cc文件存在的情況下,後綴構建也會失敗。

回答

1

您在告訴SCons您的env.Command()的結果(=目標)是「/tmp/dummy」。嘗試使用

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

代替,這樣SCons的可以自動拾取的依賴。你不需要顯式的Depends()

+0

問題是demo.cc不是demo.py的輸出。 demo.py會在內部產生很多文件,demo.cc就是其中之一.. – FaceBro

+1

你如何期待SCons知道這一點?你真正需要的是一個Emitter,它會返回你的命令創建的所有目標文件。看看我們的[ToolsForFools指南](https://bitbucket.org/scons/scons/wiki/ToolsForFools),你可以在這裏找到一個例子。 – dirkbaechle

+0

將在稍後檢查。我現在的方法有什麼問題?我總是使用並依賴於顯式指定依賴項,仍然無法工作? – FaceBro