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)
в моем приложении. Кто-нибудь, помогите мне понять эту проблему.