首页 > 解决方案 > 跨目标传播库依赖项

问题描述

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

然后我们改变它来自动整理依赖关系。为此,我们简单地使用递归方法传播每个库依赖项(禁止循环)。这对雅很有效

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

Y.a: Need X.so

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

理想情况下,我们希望 SCons 拥有这种智能,也许它已经拥有,但我们直到现在还没有找到它!

标签: c++scons

解决方案


SCons 目前没有实现这一点。

欢迎请求请求。

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


推荐阅读