我在这里浏览了示例 scons 构建,发现他们想要提供适合我项目的解决方案。
结构如下:
root/
Module_A/
include/
foo.h
bar.h
src/
foo.cpp
bar.cpp
Module_.../
每个模块都遵循相同的结构,所有 .h 的包含文件夹和 cpps 的 src 文件。每个模块都构建成一个共享对象。没有可执行文件。
模块具有交叉依赖关系。例如 Module_A 是日志机制,它用于模块 B、C、D 等。同样,Module_B 是配置加载器,用于其他几个模块。Module_C 将是 IPC 模块,几乎用于列出的每个模块。最后,Module_D 是命令中心,并链接到所有其他模块(字面意思)。
我有兴趣替换我们使用递归 make 来构建项目的当前设置。我正在尝试构建必要的 sconstruct 和 SConscripts,但我什至还很陌生,更不用说 scons 了。
我有兴趣将每个模块的 .cpp 和 .h 转换为 .so并像现在使用 make 一样自动解决其依赖关系。
在 SConscript 中,我目前使用 glob 获取 *.cpps,然后将模块的“./include”包含在 CPPPATH 中。我用过
env.SharedLibrary(CPPATH='./include', source= (list of the cpps))
但是由于这依赖于其他模块,所以它不起作用,说明使用的其他模块的功能是“未声明的”。
如何使用分层 scons 设置构建这种复杂的结构?