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()
。
问题是demo.cc不是demo.py的输出。 demo.py会在内部产生很多文件,demo.cc就是其中之一.. – FaceBro
你如何期待SCons知道这一点?你真正需要的是一个Emitter,它会返回你的命令创建的所有目标文件。看看我们的[ToolsForFools指南](https://bitbucket.org/scons/scons/wiki/ToolsForFools),你可以在这里找到一个例子。 – dirkbaechle
将在稍后检查。我现在的方法有什么问题?我总是使用并依赖于显式指定依赖项,仍然无法工作? – FaceBro