如何在 CMake 中包含 boost::future?

Posted

技术标签:

【中文标题】如何在 CMake 中包含 boost::future?【英文标题】:How to include boost::future in CMake? 【发布时间】:2020-02-04 07:52:10 【问题描述】:

我想在我的 C++ 代码中使用boost::future

#include <boost/thread/future.hpp>
boost::future<int> f...

只在C++ 文件中包含标头会导致编译错误:

error: ‘future’ in namespace ‘boost’ does not name a template type

所以我尝试在CMakeLists.txt 文件中包含future

find_package(Boost COMPONENTS future REQUIRED)

但是,make 命令返回错误:

CMake Error at /usr/local/share/cmake-3.15/Modules/FindPackageHandleStandardArgs.cmake:137 (message): Could NOT find Boost (missing: future) (found version "1.71.0")

那么如何从 boost 中包含未来?

【问题讨论】:

我想 Boost future 是一个只有标头的库。 COMPONENTS 调用的 COMPONENTS 部分不需要包含 Boost 标头库。 您只需将Boost组件添加到find_package,它们是实际的库。但是 Boost 的许多组件都是仅标头的,因此您可以在源代码中包含标头并使用它。 @vre @Simon,你的意思是find_package(Boost COMPONENTS)?如果我这样做,C++ 代码将无法编译:error: ‘future’ in namespace ‘boost’ does not name a template type 您仍然需要在代码中包含未来的标头 @AlanBirtles,我编辑了这个问题,它包含在... 【参考方案1】:

你需要:

#define BOOST_THREAD_PROVIDES_FUTURE

这是记录在here

所以你可以使用:

#define BOOST_THREAD_PROVIDES_FUTURE
#include <boost/thread/future.hpp>
boost::future<int> f;

或者:

#include <boost/thread/future.hpp>
boost::unique_future<int> f;

或者:

// any version >= 3 will work
#define BOOST_THREAD_VERSION 5
#include <boost/thread/future.hpp>
boost::future<int> f;

【讨论】:

以上是关于如何在 CMake 中包含 boost::future?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CMake 项目中包含外部库

如何安装 CMake 在 find_package 中包含 catkin/ROS 的项目?

在cmake的所有cpp文件中包含c ++标头[重复]

在 CMake 中包含 NSIS 脚本

在 cmake c++ 项目中包含库的首选方法是啥?

在 CMAKE 中包含来自 Android 项目的不同文件夹的静态库