代码之家  ›  专栏  ›  技术社区  ›  Troskyvs

Scons:如何为第三方编译结果指定文件依赖关系?

  •  0
  • Troskyvs  · 技术社区  · 6 年前

    在我看来,scons目标不是按声明顺序生成的。我的问题是,我需要先生成一些代码,我用protoc来处理我的原型文件转换成.h和.cc文件,我需要一些这样的伪代码(工作代码应该是什么样子的?)

    import os
    env=Environment(ENV=os.environ,LIBPATH='/usr/local/lib')
    env.ShellExecute('protoc', '--outdir=. --out-lang=cpp', 'my.proto')//produces my.cc
    myObj=Object('my.cc')//should wait until 'my.cc' is generated by protoc
    Dependency(myObj, 'my.cc')
    mainObj=Object('main.cpp')
    

    1. 如何在SConstruct/SConscript中指定protoc的这个shell执行?

    1 回复  |  直到 6 年前
        1
  •  3
  •   dirkbaechle    6 年前

    你的观察和假设是正确的, 不会按照在SConstruct文件中列出的顺序执行单个生成命令。它将根据构建中的目标和源文件的依赖关系来运行它们,这些定义或是隐式定义的(例如,在C++中包含头)或显式地(通过 Depends() 方法)。

    因此,您必须正确地定义和设置依赖项,以便 烤饼 提供您想要的输出。为了特别节目 protoc 在您的示例中,有一个特殊的生成器可以帮助您正确地获取依赖关系图。我们的商店有售 ToolsIndex ,也支持多种其他语言和方言。

    *.proto 输入文件,以及 烤饼 然后能够自动检测 输入文件和您的 main 如果你说这样的话:

    env=Environment(tools=['default','protoc'])
    env.Protoc([], "test.proto")
    env.Program('main', ['main.cpp'] + Glob('*.cc'))
    

    这个 Glob('*.cc') 会检测到你的 *.cc 原生动物 主要的 .

    你可以随时写你自己的建设者和发射器 烤饼 烤饼 相关性分析。在 UserGuide ,门派。“18写你自己的建设者“,尤其是我们的 ToolsForFools Guide 你可以找到更多关于这个的信息。