静态库和SCons的传递依赖性

时间:2011-02-03 14:58:51

标签: python c dependencies scons

在为两者构建两个库和测试程序时,我偶然发现了一个看似简单的问题。

问题:我有两个静态库,libA和libB,而libB依赖于libA。我不想明确地将使用libB的所有程序链接到libA,我希望SCons看到如果程序链接到库B,它也应该链接到库A.

我已经构建了一个简单的例子来说明这个问题。由于我找不到合适的文件托管服务器并且这与编程有关,因此我创建了一个小型SVN存储库:

svn checkout https://example-repository.googlecode.com/svn/trunk example-repository

或者您可以下载tarball here

2 个答案:

答案 0 :(得分:4)

SCons没有像你描述的那样内置支持表达传递库依赖关系,但它的年轻表兄Waf却支持它。有关Waf一书中的“使用”功能,请参阅documentationBoost build system也有此功能under a different name。如果你愿意编写一些Python代码,你也可以选择在SCons中自己实现它。

您可以使用的一个技巧是将回调定义为构造变量(即将通过Python函数调用扩展的字符串)。让该函数调用基于您在分析时计算的某种形式的依赖图计算所需库的传递列表(即通过SConscripts中的方法调用),并且您不必为每个目标重复完整的库列表或环境。

答案 1 :(得分:0)

什么是libB和libA?它们是一个大的.o文件还是由几个.o文件组成?

如果lib是多个.o文件,并且您正在使用libA的.o文件之一调用libB的.o文件中的函数,那么您将获得libB的.o和依赖的libA .o文件。如果您在libB .o中使用的函数不依赖于libA中的任何内容,那么您只能在二进制文件中获取libB .o文件。

因此,如果你有命令:

cc -o a.out a.c libA.a libB.a

您只能从libB和libA获取所需的部件。