使用SCons创建层次化构建

6 投票
2 回答
3126 浏览
提问于 2025-04-16 04:08

我有一个库项目,其中包含一些在子文件夹中的示例。

这个库本身有一个 SConstruct 文件,而每个示例都有自己的文件夹和自己的 SConstruct 文件。

我想在主(根) SConstruct 文件中添加一个目标,这样我就可以像往常一样编译库,同时一次性编译所有示例。

有没有现成的机制或构建工具可以做到这一点?

附注:我不想只有一个大的 SConstruct 文件,因为我希望示例文件夹保持独立。

2 个回答

4

对于像我这样通过谷歌找到这个问题的人,我发现了一个更完整的示例,展示了如何构建一个库以及调用它的代码,具体内容可以在这里找到。

如果回答一个旧问题被认为不妥,我在此表示歉意——很多人搜索“scons”、“子目录”、“层次结构”、“构建”等各种组合时,都会找到这个页面。我希望能帮其他人节省我花了8个多小时才搞定的层次构建问题。

8

http://www.scons.org/doc/production/HTML/scons-man.html

创建层次化构建

注意,在子目录的 SConscript 文件中指定的文件名是相对于该子目录的。

SConstruct 文件:

env = Environment()
env.Program(target = 'foo', source = 'foo.c')

SConscript('sub/SConscript')

子目录的 SConscript 文件:

env = Environment()
# Builds sub/foo from sub/foo.c
env.Program(target = 'foo', source = 'foo.c')

SConscript('dir/SConscript')

更深层目录的 SConscript 文件:

env = Environment()
# Builds sub/dir/foo from sub/dir/foo.c
env.Program(target = 'foo', source = 'foo.c')

撰写回答