c++ - 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
函数中的错误还是我遗漏了什么?
解决方案
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)
推荐阅读
- reactjs - 使 Material UI Container Component 响应式
- laravel - 试图获取非对象 Laravel 8 的属性“id”
- c# - VSTO 发送自定义电子邮件
- javascript - React Native 在 Button 上设置了“冷却时间”
- c# - 在 C# 中将 int 类型更改为 char 类型
- google-cloud-platform - 上传对象到谷歌云存储后获取响应码
- webpack - Webpack SplitChunksPlugin - 完全排除一个入口点
- python-3.x - 如何在另一个代码中导入我的 CNN 模型?
- amazon-web-services - 服务器返回 204(无内容)但 api 网关返回 200(成功)
- java - 如何使用 GPS 在 android 中获取当前时间和日期