我目前正在使用基于SCons的构建系统,我不能维护它,但可以为维护者提供输入。
它遇到的一个问题是处理C ++源包之间的依赖关系。在系统中,每个源包都是基于Windows上的DLL或Linux上的共享库构建的。
假设包A包含对包B和C的依赖性.B和C在包A的SConscript中指定。这可以。包A的DLL也将链接到B和C的DLL。这也很好,因为在构建这些DLL时,已经解决了B和C所具有的任何链接依赖性。
复杂性带有与它们相关联的单元测试的包。在这里,我们需要知道完整的,递归扩展的库依赖项列表,主要有两个原因:
我们不希望必须明确指定完全展开的依赖项列表,因为它过于冗长且存在维护问题。
当前系统仍然有问题,它确实要求我们只需要在SConscripts包中指定直接依赖关系,但是通过SConstruct中的Python代码解析间接依赖关系。此代码打开并解析SConscript文件,并根据这样提取的信息构建依赖关系的映射。这种方法感觉不对。直觉上,我觉得应该有一种方法可以更自然地使用原生的SCons设施,但我不熟悉SCons能够提出更好的方法。有没有更好的方式,它是什么?
答案 0 :(得分:1)
这是一个黑客,但我只是在我的顶层环境中保存一个变量,导出到我的所有SConscripts,每次一个SConscripts需要一个新的库时,我就这样做:
env.Append(TOPLEVEL_LIBS = ['somelib'])
这样,env ['TOPLEVEL_LIBS']包含了所有必需的库,并且可以从任何SConscript访问它。