【问题标题】:(C++17; Boost) CMake unable to find the requested Boost libraries(C++17; Boost) CMake 找不到请求的 Boost 库
【发布时间】:2020-04-12 17:28:36
【问题描述】:

我是 C++ 新手,想在我的项目中包含 boost 库(特别是需要构建的文件系统部分)。我尝试了其他 stackoverflow 用户的许多解决方案,但他们根本没有帮助我。我正在将 CLion 与 CMake 一起使用。 main.cpp 正在调用 modules/ 文件夹中的其他 .cpp 文件。

文件结构:

ProjectName
    >boost
        >lots of folders and .hpp files
    >cmake-build-debug
    >modules
        encryption.cpp
        encryption.h
        output.cpp
        output.h
    CMakeLists.txt
    main.cpp

当您下载并解压时,boost 文件夹不包含整个 boost。我在我的项目中拖动了 boost_1_72_0 内的 boost 文件夹(只是为了让你知道里面没有 libs 文件夹等)

CMakeLists.txt

cmake_minimum_required(VERSION 3.14)
project(ProjectName)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++ -static-libgcc")

set(SOURCE_FILES
        main.cpp
        modules/encryption.cpp modules/encryption.h modules/output.cpp modules/output.h
        )

set(Boost_ARCHITECTURE -x64)
set(BOOST_ROOT boost/)
set(Boost_INCLUDE_DIRS boost/filesystem)
find_package(Boost COMPONENTS system filesystem REQUIRED)
if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
endif()

add_executable(ProjectName ${SOURCE_FILES})
target_link_libraries(ProjectName ${Boost_LIBRARIES})

输出.cpp

// some includes //
#define BOOST_FILESYSTEM_NO_DEPRECATED

#include "../boost/filesystem.hpp"

// some code //

错误信息:

CMake Error at C:/Program Files/JetBrains/CLion 2019.1.4/bin/cmake/win/share/cmake-3.14/Modules/FindBoost.cmake:2147 (message):
  Unable to find the requested Boost libraries.

  Unable to find the Boost header files.  Please set BOOST_ROOT to the root
  directory containing Boost or BOOST_INCLUDEDIR to the directory containing
  Boost's headers.
Call Stack (most recent call first):
  CMakeLists.txt:15 (find_package)


-- Configuring incomplete, errors occurred!
See also "C:/Users/username/Desktop/C++/ProjectName/cmake-build-debug/CMakeFiles/CMakeOutput.log".
mingw32-make.exe: *** [cmake_check_build_system] Error 1
Makefile:235: recipe for target 'cmake_check_build_system' failed

我知道它基本上是在告诉我必须做什么,但我不知道 boost 的“根目录”、“包含 Boost 的标头”的目录以及如何将所有内容放在一起的确切含义。

非常感谢!

【问题讨论】:

    标签: c++ boost c++17


    【解决方案1】:

    我在我的项目中将 boost_1_72_0 中的 boost 文件夹拖到了

    看起来您刚刚将 boost 源代码复制到了项目目录中。 你必须 compile boost 因为你需要文件系统。或者您可以通过以下方式获得提升:

    我不知道“根目录”到底是什么意思...

    由于您通过调用find_package(Boost) 使用boost - CMake 使用FindBoost 模块。它将尝试在系统 PATH 变量或其他一些“标准”位置找到您的 boost 安装。您的升压“安装”并不常见,因此您必须使用 BOOST_ROOT 变量指定升压的位置。 set(BOOST_ROOT boost/) 是不正确的做法。您必须指定绝对路径,例如 set(BOOST_ROOT "C:/lib/boost/boost17.2") 或相对于当前的 CMakeList.txt - set(BOOST_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/boost}.

    安装正确的 boost 你所要做的就是:

        find_package(Boost REQUIRED [COMPONENTS <libs>...])
        target_link_libraries(main PRIVATE ${Boost_LIBRARIES})
        target_include_directories(main PRIVATE ${Boost_INCLUDE_DIRS})
    

    【讨论】:

    • 我将您的解决方案添加到我的 CMakeLists.txt 文件中,但我仍然需要编译 boost。出于某种原因,vcpkg 将无法工作(我得到了带有 C++ 支持的 MSBuild 错误)。使用 bootstrap.bat 手动编译 boost 时,日志文件中出现错误:Unknown toolset: vcunk.
    • @Frenggie vcpkg 需要 MSVC 编译器。您是否安装了带有 c++ 工具或独立 VS 构建工具的 Visual Studio?
    • 我有 Visual Studio 但没有 C++ 工具。我将 CLion 与 mingw 和 cmake 一起使用。没有任何VS构建工具,有什么方法可以构建boost?
    • 我现在正在安装 12 GB 的构建工具,以确保我得到了我需要的任何东西。我使用this 线程和来自顶级答案的命令。我希望就是这样。
    • @Frenggie 是的,您可以使用 MinGW 构建提升。您还可以为 vcpkg 创建自定义 MinGW triplet。但我建议你坚持使用 MSVC。您可以添加MSVC compiler to CLion
    【解决方案2】:

    通常,您不需要设置Boost_ARCHITECTUREBoost_INCLUDE_DIRS,CMake 会为您完成。

    当您使用 find_packageREQUIRED 选项时,您不需要检查是否找到库,因为 CMake 在找不到库时会引发错误。

    BOOST_ROOT 是安装或解压 boost 时的目录。 BOOST_INCLUDEDIR 是一个带有 boost 标头的目录(通常是 BOOST_ROOT/boost)。所以尝试将boost_1_72_0 目录的完整路径设置为BOOST_ROOT CMake 变量。

    另外,COMPONENTS 选项有问题。如果错误仍然存​​在,请尝试将其删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 2016-04-21
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多