вызов cmake target_link_libraries () с той же целью и именем переменной не добавляет запросы - PullRequest
0 голосов
/ 27 марта 2020

На Linux я использую CMake (3.16.5) для связи в нескольких несистемных общих библиотеках, расположенных в разных каталогах. В этом примере макет каталога упрощен:

lib1:
libfoo.so

lib2:
libbar.so

Компиляция и компоновка приложения работает правильно, если один вызов target_link_libraries () со всеми целями или если find_library () использует уникальную переменную для хранения результаты передаются target_link_libraries (). Например:

    #### foo lib
    find_library(FOO_LIB_FOUND foo PATH ./lib1)
    target_link_libraries(hello ${FOO_LIB_FOUND})

    #### bar lib
    find_library(BAR_LIB_FOUND bar PATH ./lib2)
    target_link_libraries(hello ${BAR_LIB_FOUND})

Однако неразрешенная ссылка на libbar.so возникает при использовании той же переменной в find_library (), которая в конечном итоге передается target_link_libraries (). Например:

    #### foo lib
    find_library(**LIB_FOUND** foo PATH ./lib1)
    target_link_libraries(hello ${**LIB_FOUND**})

    #### bar lib
    find_library(**LIB_FOUND** bar PATH ./lib2)
    target_link_libraries(hello ${**LIB_FOUND**})

find_library () фактически указывает на то, что она найдена в lib1. Согласно CMake, «Повторные вызовы для одних и тех же« целевых »элементов добавляются в порядке вызова». Я даже пытался использовать функцию / подпрограмму, но та же проблема.

    function(SIMPLE arg1 arg2 arg3)
       find_library(LIB_FOUND ${arg1} PATH ${arg2})
       target_link_libraries(${arg3} ${LIB_FOUND})
    endfunction()

    SIMPLE(foo ./lib1 hello)
    SIMPLE(bar ./lib2 hello)

В конечном счете, я надеюсь сделать эту последовательность find_library / target_link_libraries в FOREACH l oop, так как у меня будет много библиотек и путей найти динамически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...