SCons的未能找到生成的文件

问题描述:

我特林生成一些源文件,并使用生成的文件进行编译..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文件存在的情况下,后缀构建也会失败。

您在告诉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