【问题标题】:SCons dependencies between SConstruct-independent projects in different directories不同目录中与 SConstruct 无关的项目之间的 SCons 依赖关系
【发布时间】:2014-05-27 16:49:12
【问题描述】:

现在我有一个类似的项目结构:

project1/SConstruct (creates library1 and executable1)
         files
project2/SConstruct (creates library2 and executable2)
         files
project3/SConstruct (creates executable3 without libraries
                     creates executable4 with library1 and library2)
         files

我可以毫无问题地使用 SCons 构建所有项目,但我想将项目 1 和 2 的依赖项添加到项目 3 中。在项目 3 中运行 scons 时,如果项目 1 或 2 不符合要求-日期,我希望它们被建造。

这类似于SCons: directory dependency in a parallel build,不同的是我有几个SConstruct文件,每个项目一个。

我还想将命令行选项传递给依赖项项目,即在项目 3 中运行 scons debug=1 时,项目 1 和 2 将使用 debug=1 重建。

有没有办法实现这一点,或者我应该更改我的目录/构建结构?

【问题讨论】:

    标签: scons build-dependencies


    【解决方案1】:

    您不必更改基本构建结构。你所需要的只是将你的单个项目组合成一个通用的依赖树,这样 SCons 就可以自动为你找出其余的。 为此,在与您的“project_x”目录相同的文件夹中添加一个顶级 SConstruct 文件,并像这样调用您的子项目:

    SConscript('project1/SConstruct')
    SConscript('project2/SConstruct')
    SConscript('project3/SConstruct')
    

    然后在您的 project3 中,添加来自 project1 的库(我们将其命名为“libproj1.a”)及其路径:

    env = Environment()
    env.Append(LIBS = ['proj1'])
    env.Append(LIBPATH = ['../project1'])
    env.Program('main3','main3.cpp')
    

    你就完成了。 像这样,“debug=1”选项到达所有项目,并在需要时自动触发重建。 如果要构建单个项目/目标,可以在命令行中指定:

    scons project1
    

    scons project3/main3
    

    .

    【讨论】:

    • 谢谢,解决了。我只需要添加顶级 SConstruct 文件,因为我已经在管理库依赖项。但是我希望有一个解决方案,我仍然可以从“project3”内部运行scons,这是我通常工作和运行测试的地方。
    • 好的,我修改了顶级脚本行并将它们移动到project3/SConstruct,现在它可以按我的意愿工作了。再次感谢。修改为:SConscript('../project1/SConstruct')SConscript('../project2/SConstruct')
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 2014-02-26
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 2015-08-02
    • 2012-03-24
    相关资源
    最近更新 更多