跨目标传播库依赖性
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.so
和foo.a
的依赖。
理想情况下,我们希望 SCons 拥有这种智能,也许它已经拥有,只是我们直到现在才发现它!
SCons 目前没有实现这个。
欢迎提出请求。
您可能会考虑将您当前的实现加入 scons 用户邮件列表?也许可以扩展它来做你想做的事情,然后为 SCons 做出贡献?
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.so
和foo.a
的依赖。
理想情况下,我们希望 SCons 拥有这种智能,也许它已经拥有,只是我们直到现在才发现它!
SCons 目前没有实现这个。
欢迎提出请求。
您可能会考虑将您当前的实现加入 scons 用户邮件列表?也许可以扩展它来做你想做的事情,然后为 SCons 做出贡献?