WAF - объединять статические библиотеки

У моего проекта есть зависимости от внешних библиотек, и я использую сценарии 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)

не буду. Есть ли способ преодолеть это? Или мне нужно сделать это вручную в функции пост сборки?

1 ответ

До версии 1.8 статические библиотеки использовали одинаковое поведение рекурсивных зависимостей с общими объектами. Из-за порядка использования статических библиотек, я думаю, что это было удалено. Это означает, что если ваш общий объект зависит от других библиотек, waf автоматически включит их, но для статических библиотек вы должны перечислить все библиотеки в правильном порядке самостоятельно.

Вот как следует использовать "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)
Другие вопросы по тегам