SCons在不同目录中的SConstruct独立项目之间的依赖关系

时间:2014-05-27 16:49:13

标签: scons build-dependencies

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

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重建。

有没有办法实现这个目标,还是应该更改我的目录/构建结构?

1 个答案:

答案 0 :(得分:2)

您不必更改基本构建结构。您只需将单个项目组合到一个公共依赖树中,这样SCons就可以自动为您找出其余的项目。 为此,在与" project_x"相同的文件夹中添加顶级SConstruct文件。 dirs并打电话给你的子项目:

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