我的项目有外部库依赖项,我使用waf脚本来构建它 - C,C ++。
我正在尝试构建静态库,它将静态链接所有依赖库。例如,我使用它来构建动态共享对象:
bld.program(features = 'c cxx cxxshlib'
, target = 'program'
, source = sources
, use = libs_list)
共享对象将链接所有依赖库(使用libs_list
指定)。
但是,静态库:
bld.program(features = 'c cxx cxxstlib'
, target = 'program'
, cppflags = '-DSTATIC_LIB'
, source = sources
, use = libs_list)
不会。有办法克服这个问题吗?或者我是否需要在后期构建功能中手动执行此操作?
答案 0 :(得分:1)
在waf 1.8之前,静态库用于与共享对象共享相同的递归依赖性行为。由于静态库的使用顺序,我认为这已被删除。这意味着如果你的共享对象依赖于其他libs,waf会自动包含它们,但是对于静态libs,你必须自己以正确的顺序列出所有库。
以下是应该如何使用'uselib':
def configure(conf):
# for libs that have a pkg-config
conf.check_cfg("expat", args = ["--libs"])
# to use /some/path/libotherextlib.a or .so
conf.env.LIB_OEL = ['otherextlib']
conf.env.LIBPATH_OEL = ["/some/path"]
def build(bld):
lib_lists = ["expat", "oel"]
bld.shlib(target = 'myshlib', source = sources, use = libs_list)
bld.stlib(target = 'mystlib', source = sources, use = libs_list)
要模块化,你可以这样做:
bld.objects(source = sources1, name = "module1")
bld.objects(source = sources2, name = "module2")
modules = ["module1", "module2"]
bld.stlib(target = 'mystlib', use = modules)
bld.shlib(target = 'myshlib', use = modules)