gpt4 book ai didi

build - Scons分层构建

转载 作者:行者123 更新时间:2023-12-02 17:46:04 29 4
gpt4 key购买 nike

我浏览了此处构建的 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= (cpps 列表))

但是因为这依赖于其他模块,所以它不会工作,说明使用的其他模块的功能“未声明”。

如何使用分层 scons 设置来构建这种复杂的结构?

最佳答案

使用 SCons 应该很容易做到这一点。您可能希望在每个模块的根目录下都有一个 SConscript 脚本。这些都将由位于整个项目根目录的 SConstruct 脚本调用。

如果我理解正确,模块之间的依赖关系问题可以通过正确指定所有模块的包含路径来解决。这可以在 SConstruct 中创建的环境中一次完成,然后应该将其传递给模块 SConscript 脚本。

这是一个简单的例子:

构建

env = Environment()

# Notice that the '#' in paths makes the path relative to the root SConstruct
includePaths = [
'#/Module_A/include',
'#/Module_B/include',
'#/Module_N/include',
]

env.Append(CPPPATH=includePaths)

SConscript('Module_A/SConscript', exports='env', duplicate=0)
SConscript('Module_B/SConscript', exports='env', duplicate=0)
SConscript('Module_N/SConscript', exports='env', duplicate=0)

Module_A/SConscript

Import('env')

# Notice the CPPPATH's have already been set on the env created in the SConstruct
env.SharedLibrary(target = 'moduleA', source = ModuleA_SourceFiles)

Module_B/SConscript

Import('env')

# Notice the CPPPATH's have already been set on the env created in the SConstruct
env.SharedLibrary(target = 'moduleB', source = ModuleB_SourceFiles)

Module_N/SConscript

Import('env')

# Notice the CPPPATH's have already been set on the env created in the SConstruct
env.SharedLibrary(target = 'moduleN', source = ModuleN_SourceFiles)

关于build - Scons分层构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388552/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com