如何使用scons在静态库中获取目标文件

时间:2014-04-29 10:35:22

标签: static-libraries scons

我正在使用scons来构建我的项目。现在我遇到了问题。

我用左 env.StaticLibrary('a', [a1.o, a2.o])
得到一个静态库“liba.a”。

现在我将“liba.a”传递给我项目的另一部分,在该部分中,我将生成另一个名为“libb.a”的静态库,这将合并“liba.a”和其他一些目标文件。

这样的代码:
env.StaticLibrary('b', ['liba.a', 'b1.o', 'b2.o'] )

在这个问题上 Linking static libraries, that share another static library我们知道我们不能简单地将静态库合并到另一个静态库中,因为这可能会导致一些符号问题。

现在我想以这种方式解决这个问题:

首先获取'liba.a'的目标文件。然后将此目标文件与新目标文件合并,以生成最终的“libb.a”。

但是我发现找不到一个方法或函数来使用scons在静态库中获取目标文件。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

听起来你只想为2个不同的库使用相同的目标文件。

你可以这样做:

env = Environment()

env.StaticLibrary('a', ['a1.o', 'a2.o'])
env.StaticLibrary('b', ['b1.o', 'b2.o', 'a1.o', 'a2.o'])

此外,您可以直接指定源文件,而不是处理Object文件。在这种情况下,SCons将仅根据需要编译源文件一次。

env.StaticLibrary('a', ['a1.c', 'a2.c'])
env.StaticLibrary('b', ['b1.c', 'b2.c', 'a1.c', 'a2.c'])

另外,请记住每个SCons构建器都返回一个目标列表(每个目标都是一个SCons节点)。该列表可能有一个或多个条目。因此,例如,以下目标变量将包含库目标,以及所有构建的对象:

target = env.StaticLibrary('a', ['a1.c', 'a2.c'])
for t in target: print str(t)