CMake find_package Boost在多次使用时失败

时间:2018-06-07 16:15:34

标签: c++ boost cmake

我正在尝试使用我编写的库(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。

0 个答案:

没有答案