В проекте мы используем ExternalProject_add
для управления обычными третьими лицами и управления процессом их загрузки и сборки (некоторые приходят с обычного URL, другие из репозитория git)
Недавно я столкнулся с необходимостьюдобавить лишнего третьего участника. Это пока единственная третья сторона только для заголовков. Для тех, кто заинтересован, это kvasir_mpl
.
Однако, когда я пытаюсь target_link_libraries
с kvasir_mpl
, CMake всегда рассматривает его как обычную библиотеку, и в конце концов сборкасбои:
[83%] Связывание исполняемого приложения CXX
/ usr / bin / ld: невозможно найти -lkvasir_mpl
Я разработал минимальный пример для воспроизведенияпроблема:
. / CMakeLists.txt:
cmake_minimum_required( VERSION 3.7.0 )
project( Test CXX )
add_subdirectory( kvasir )
add_subdirectory( app )
. / app / CMakeLists.txt:
project( App CXX )
add_executable( app main.cpp )
target_link_libraries( app kvasir_mpl )
kvasirmpl / CMakeLists.txt:
cmake_minimum_required( VERSION 3.7.0 )
project( KvasirMpl )
include( ExternalProject )
ExternalProject_Add(
3rdparty_kvasirmpl
GIT_REPOSITORY https://github.com/kvasir-io/mpl
GIT_TAG origin/development
INSTALL_COMMAND ""
BUILD_COMMAND "" )
Обратите внимание, что если я использую ключевое слово подпись target_link_libraries( app INTERFACE kvasir_mpl )
, моя проблема будет решена. Однако в нашем реальном случае использования target_link_libraries
запускается через пользовательские функции CMake и может передавать что угодно из файла обычной библиотеки в цель CMake, заставляя нас использовать простую подпись.
Есть ли способзаставить работать простую подпись в этом случае?