跨目标传播库依赖性

Propagate library dependencies across targets

TLDR:假设 X 是一个共享库,那么给定这个代码

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

有没有办法让 SCons 自动注意到 Z 必须 link 也反对 X 并因此自动将其添加到 link 行?


在我们的 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.a。

但是假设 X 是一个共享库。正确的依赖关系需要看起来像这样

Y.a: Need X.so

在 X 中,我们已经封装了静态(和位置无关)foo.a,并且我们在 X.so 本身中也有先决条件声明(动态需要)以在运行时解析 bar.so .因此,我们一定不要在这里重新声明对bar.sofoo.a的依赖。

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

SCons 目前没有实现这个。

欢迎提出请求。

您可能会考虑将您当前的实现加入 scons 用户邮件列表?也许可以扩展它来做你想做的事情,然后为 SCons 做出贡献?