传播目标之间的库依赖关系

时间:2019-11-15 14:17:33

标签: c++ scons

TLDR:假设X是一个共享库,然后给出此代码

Y = StaticLibrary(..., LIBS = "X")
Z = SharedLibrary(..., LIBS = "Y")

有没有一种方法可以使SCons自动注意到Z也必须与X链接,从而自动将其添加到链接行中?


在我们的SCons构建系统中,我们有许多不同的目标,每个目标可能一次又一次地依赖于相同的库。

foo.a: Need bar.so
X.a: Need foo.a
Y.a: Need X.a

直到现在,直到几年之前,我们都需要在SConscripts上手动指定传递依赖关系,以满足中间库文件的依赖关系。例如。在上面,我们将必须手动指定

 Y.a: Need X.a, need foo.a, need bar.so

然后,我们将其更改为自动整理依赖项。为此,我们仅使用递归方法(禁止循环)传播每个库依赖项。这对Y很好

但是假设X是一个共享库。然后,正确的依赖关系应该像这样

Y.a: Need X.so

在X内,我们已经封装了静态(且与位置无关)foo.a,并且在X.so本身中还具有先决条件声明(动态NEEDED),以便在运行时解析bar.so。因此,在此我们不能重新声明对bar.sofoo.a的依赖性。

理想情况下,我们希望SCons具有这种智能,也许它已经具有,而我们直到现在才发现!

1 个答案:

答案 0 :(得分:0)

SCons当前未实现。

欢迎提出请求。

您可能考虑将您当前的实现方式添加到scons用户邮件列表中?也许可以扩展它来执行您的要求,然后为SCons做出贡献?