【发布时间】:2019-10-01 13:57:02
【问题描述】:
我最近学习了如何在 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 一样使用它?
【问题讨论】:
-
"是否有任何方便的解决方案可以像 CMake 中的 Boost.Filesystem 一样使用它?" - 您可以创建一个 INTERFACE 库。它与 IMPORTED 目标(如 Boost.Filesystem)的主要区别在于缺少
IMPORTED_LOCATION属性。正是这与普通的头文件库不同。
标签: boost cmake build-system