带有仅标头库的CMake的find_package

时间:2019-10-01 13:57:02

标签: boost cmake build-system

最近我已经学习了如何在CMake中使用find_package,我注意到它仅适用于预编译的库。

此行符合预期:

find_package(Boost COMPONENTS filesystem REQUIRED)

如果成功,我以后可以使用类似的东西

target_link_libraries(target Boost::filesystem)

使用接口可以非常轻松地链接Boost.Filesystem所需的所有必要依赖关系。但是对于像Boost.Asio这样的仅标头库也有类似的解决方案会很棒(我知道可以将其构建到单独的对象中,但出于示例目的,我会将其视为仅标头库)

find_package(Boost COMPONENTS asio REQUIRED)
target_link_libraries(target Boost::asio)

这将无法正常工作。

ASIO的实现要求我们在类似UNIX的系统上链接pthread,因此我们可以说该库具有一个依赖项,即线程库。是否有任何便捷的解决方案以与CMake中的Boost.Filesystem相同的方式使用它?

1 个答案:

答案 0 :(得分:1)

您可以使用<meta name="csrf-token" content="{{ csrf_token() }}"> 作为目标,使用find_package来查找仅标头的依赖项,请参见FindBoost,即:

Boost::boost

但是,您会发现find_package(Boost COMPONENTS boost REQUIRED) if(Boost_FOUND) target_include_directories(target ${Boost_INCLUDE_DIRS}) else() message(STATUS "Boost NOT Found !") endif(Boost_FOUND) 仅是标头,但它需要Boost::asio。 因此,您需要:

Boost::system