Библиотека C ++ INTERFACE только для заголовков показывает ошибку компоновщика во втором зависимом проекте CMake - PullRequest
0 голосов
/ 20 мая 2019

myapp - исполняемый файл

mylib1 - библиотека с исходным кодом и заголовками

mylib2 - библиотека только для заголовков

Это моя цепочка зависимостей,

myapp -> mylib1 -> mylib2

mylib2 прекрасно компилируется (проверено тестами)

mylib1 прекрасно компилируется

компиляция myapp не удалась с ошибкой

Target "myapp" links to target "mylib2::mylib2" but the target
  was not found.  Perhaps a find_package() call is missing for an IMPORTED
  target, or an ALIAS target is missing?

Когда я использую target_link_libraries(myapp PRIVATE mylib2). Я без ошибок! Но я хочу содержать mylib2 внутри mylib1

myakeb2 CMakeLists.txt

add_library(mylib2 INTERFACE)
target_include_directories(mylib2 INTERFACE
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>)

CMakeLists.txt mylib1

find_package(mylib2)
add_library(mylib1 ${mylib1_SOURCES})
target_include_directories(mylib1 PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>)
target_link_libraries(mylib1 PUBLIC mylib2) #lib2 holds some important structs that i need to use in myapp

И, наконец, myake's CMakeLists.txt

find_package(mylib1)
add_executable(myapp app.cpp)
target_link_libraries(myapp PRIVATE mylib1)

В CMakeLists.txt моего приложения, когда я добавляю следующую строку. CMake работает без ошибок

find_package(mylib2)
# note there is no target_link_libraries(myapp mylib2)

Но без вышеприведенной строки я получаю ошибку CMake, упомянутую в начале. Я продолжаю использовать make в настроенной по ошибке папке сборки cmake. Я получаю следующую ошибку.

/usr/bin/ld: cannot find -lmylib2::mylib2

Но компоновщик не должен работать на mylib2, это только библиотека заголовков. Почему я должен включить find_package(mylib2) в моем приложении. Кто-нибудь, помогите мне понять эту проблему.

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