2

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

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中。scons在项目 3 中运行时,如果项目 1 或 2 不是最新的,我会喜欢他们被建造。

这类似于SCons:并行构建中的目录依赖项,不同之处在于我有几个 SConstruct 文件,每个项目一个。

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

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

4

1 回答 1

2

您不必更改基本构建结构。你所需要的只是将你的单个项目组合成一个通用的依赖树,这样 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

.

于 2014-05-27T21:02:58.203 回答