在 CMake 中链接 boost 文件系统的问题

Posted

技术标签:

【中文标题】在 CMake 中链接 boost 文件系统的问题【英文标题】:Problems linking boost's filesystem in CMake 【发布时间】:2020-10-03 23:00:50 【问题描述】:

我在这个项目 (https://github.com/marcomedrano1999/files_in_directory.git) 中使用来自 Boost 的文件系统库,当我将 boost 根链接到项目时它工作正常(我正在使用 Visual Studio),但我需要它是交叉的平台,所以我在我的 CMakeLists.txt 中实现了以下内容:

cmake_minimum_required(VERSION "3.18.3")

project("listdir") 

find_package(Boost 1.73.0 REQUIRED filesystem) 

include_directories("$Boost_INCLUDE_DIRS") 

link_directories("$Boost_LIBRARY_DIRS")

add_executable("$PROJECT_NAME" "Main.cpp")

target_link_libraries("$PROJECT_NAME" $Boost_LIBRARIES) 

但是当我尝试在 CMake 中配置它时,显示以下错误:

CMake Error at C:/Program Files/CMake/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:165 (message):
  Could NOT find Boost (missing: filesystem) (found suitable version
  "1.73.0", minimum required is "1.73.0")

Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:458(_FPHSA_FAILURE_MESSAGE)
  C:/Program Files/CMake/share/cmake-3.18/Modules/FindBoost.cmake:2177(find_package_handle_standard_args)
  CMakeLists.txt:5 (find_package)

我为此尝试了几种方法(如文档页面所示),但其中任何一种都有效。如果我做错了什么,谁能告诉我?

【问题讨论】:

启用Boost_DEBUG 选项并查看在哪些文件和目录中搜索filesystem 库。然后将它们与您实际拥有的文件和目录进行比较。顺便说一句,Boost_DEBUG 在documentation 中有描述。 【参考方案1】:

如果您在非标准位置安装了 Boost 库,则可以通过 BOOST_ROOT 指定 Boost 安装目录:

cmake -DBOOST_ROOT=<path to the boost installation directory> <... the rest of cmake options ...>

还要确保真正安装了 boost 的文件系统部分(文件系统是一个编译库,与其他仅头文件的库相比)。

【讨论】:

以上是关于在 CMake 中链接 boost 文件系统的问题的主要内容,如果未能解决你的问题,请参考以下文章

无法在 CMAKE 中链接 Boost

cmake - 如何可能链接 Boost 的 sub_directory 头文件(例如:/archive/text_oarchive.hpp)?

在 cmake 配置后的链接阶段不尊重 BOOST_ROOT

如何使用 CMake 自动链接 boost 库

Boost.Python 和 CMake 链接和加载错误

使用 cmake 增强链接