【问题标题】:SCons fails to find generated fileSCons 找不到生成的文件
【发布时间】:2017-09-27 12:03:53
【问题描述】:

我正在尝试生成一些源文件,并使用生成的文件进行编译..

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)

gen 会生成需要的 demo.cc

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

但是编译demo的时候报错如下:

失败:来源demo.cc' not found, needed by targetdemo.o'。

通过ls demo.cc,我确信需要的文件demo.cc确实是在正确的目录下生成的。

原因应该是依赖关系。注意到我在 demo.cc 上指定了 bin 的显式依赖。还是失败了。

任何想法为什么?

===== 更多详情 =====

每个干净的构建,即 scons -c && scons -j4,都有效。但是即使有 demo.cc 文件,后记构建也会失败。

【问题讨论】:

    标签: build dependencies scons


    【解决方案1】:

    你告诉 SCons 你的env.Command() 的结果(=target)是“/tmp/dummy”。尝试使用

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

    相反,SCons 可以自动获取依赖项。你不需要明确的Depends()

    【讨论】:

    • 问题是 demo.cc 不是 demo.py 的输出。 demo.py 会在内部生成很多文件,demo.cc 就是其中之一..
    • 您希望 SCons 怎么知道这一点?那么你真正需要的是一个发射器,它返回你的命令创建的所有目标文件。查看我们的ToolsForFools guide,您可以在其中找到相关示例。
    • 稍后会检查。我目前的方法有什么问题?我用always和depends显式指定依赖,还是不行?
    • 生成的文件列表是确定性的吗?对于 a.json,你会得到 10 个命名为可预测的文件?还是取决于json文件的内容?
    • @bdbaddogyep,对于每个 demo.json,将生成 2 个且仅 2 个名为 demo.cc 和 demo.h 的文件。
    猜你喜欢
    • 2021-06-05
    • 2014-01-15
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    相关资源
    最近更新 更多