首页 > 解决方案 > CMake 可以找到一个 Boost 头文件,但找不到另一个

问题描述

由于 Boost 库可以单独安装在某些系统上(即使可能很少见),我想确保它们可用。

我通过检查一些我需要的头文件来做到这一点:

check_include_file_cxx(boost/parameter/keyword.hpp HAVE_BOOST_PARAMETER_KEYWORD_HPP)
check_include_file_cxx(boost/asio/io_service.hpp HAVE_BOOST_ASIO_IO_SERVICE_HPP)

我遇到的问题是CMake声称它可以找到boost/parameter/keyword.hpp头文件但不能找到boost/asio/io_service.hpp头文件:

-- Looking for C++ include boost/parameter/keyword.hpp
-- Looking for C++ include boost/parameter/keyword.hpp - found
-- Looking for C++ include boost/asio/io_service.hpp
-- Looking for C++ include boost/asio/io_service.hpp - not found

是的,ASIO 头文件存在:

$ ls -l /usr/include/boost/asio/io_service.hpp
-rw-r--r-- 1 root root 861 nov 13 13:47 /usr/include/boost/asio/io_service.hpp

我安装了 Boost 1.67,并在 Debian SID 系统(最新)上使用了 CMake 版本 3.12.3。

这是check_include_file_cxx函数中的错误还是我遗漏了什么?

标签: c++cmakeheader-files

解决方案


Boost ASIO 依赖于 Boost System 库,它是一个链接库。

由于 CMake 函数check_include_file_cxx对测试程序进行了完整构建(包括链接,不仅是编译),因此除非为链接添加 Boost System 库,否则它将失败。

即使实际安装了头文件,这也会导致测试失败。

要成功,在检查头文件时必须链接 Boost System 库:

check_include_file_cxx(boost/asio/io_service.hpp HAVE_BOOST_ASIO_IO_SERVICE_HPP -lboost_system)

推荐阅读