gpt4 book ai didi

c++ - SCons:递归扩展库依赖

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:19 28 4
gpt4 key购买 nike

我目前使用的是基于 SCons 的构建系统,我不负责维护,但可以向维护者提供输入。

它的一个问题是处理 C++ 源包之间的依赖关系。在系统中,每个源码包在 Windows 上构建为 DLL,在 Linux 上构建为共享库。

假设包 A 包含对包 B 和 C 的依赖关系。B 和 C 在包 A 的 SConscript 中指定。这可以。包 A 的 DLL 也将链接到 B 和 C 的 DLL。这也很好,因为 B 和 C 具有的任何链接依赖性在构建这些 DLL 时都已经解析。

并发症伴随着具有与之关联的单元测试的包。这里我们需要知道完整的、递归扩展的库依赖项列表,主要有两个原因:

  1. 构建单元测试涉及创建一个脚本来设置 PATH 并调用可执行文件。需要为每个运行时依赖项向 PATH 添加一个条目。
  2. 在 Linux 上链接单元测试可执行文件需要完整、扩展的库依赖项列表。这与 Windows 不同,Windows 的 DLL 链接模型意味着已经考虑了间接依赖性。

我们不希望必须显式指定完全扩展的依赖项列表,因为这过于冗长且存在维护问题。

当前的系统仍然存在问题,确实要求我们只需要在包 SConscripts 中指定直接依赖项,但通过 SConstruct 中的 Python 代码解决间接依赖项。此代码打开并解析 SConscript 文件,并根据由此提取的信息构建依赖关系图。这种做法感觉不对。直觉上,我觉得应该有一种方法可以使用本地 SCons 设施更自然地做到这一点,但我对 SCons 不够熟悉,无法提出更好的方法。有什么更好的方法吗?

最佳答案

这是一个 hack,但我只是在我的顶层环境中保留一个变量,该变量会导出到我的所有 SConscripts,并且每当其中一个 SConscripts 需要一个新库时,我就这样做:

env.Append(TOPLEVEL_LIBS = ['somelib'])

这样,env['TOPLEVEL_LIBS'] 包含所有必需的库,并且可以从任何 SConscript 访问它。

关于c++ - SCons:递归扩展库依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3708011/

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