我正在使用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在静态库中获取目标文件。
任何人都可以帮助我吗?
答案 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)