我正在尝试使用我编写的库(is-msgs),它依赖于boost :: filesystem,并且具有以下is-msgsConfig.cmake文件:
include(CMakeFindDependencyMacro)
find_dependency(Protobuf)
find_dependency(spdlog)
find_dependency(Boost COMPONENTS filesystem)
include("${CMAKE_CURRENT_LIST_DIR}/is-msgsTargets.cmake")
例如,如果我尝试使用库来构建可执行文件,那么一切都像预期的那样:
find_package(is-msgs)
add_executable(example example.cpp)
target_link_libraries(example is-msgs::is-msgs)
虽然如果我的可执行文件还依赖于另一个boost组件,例如boost :: chrono,下面的代码将不起作用:
find_package(Boost REQUIRED COMPONENTS chrono)
find_package(is-msgs)
add_executable(example example.cpp)
target_link_libraries(example is-msgs::is-msgs boost::chrono)
输出:
CMake Error at CMakeLists.txt:11 (add_executable):
Target "main" links to target "Boost::filesystem" but the target was not
found. Perhaps a find_package() call is missing for an IMPORTED target, or
an ALIAS target is missing?
但是,如果我重新排序find_package指令,它的工作没有问题:
find_package(is-msgs)
find_package(Boost REQUIRED COMPONENTS chrono)
add_executable(example example.cpp)
target_link_libraries(example is-msgs::is-msgs boost::chrono)
我的is-msgsConfig.cmake文件有问题,或者这是find_package(Boost)中的错误?我正在使用CMake 3.11.1。