c++ - (C++17; Boost) CMake 找不到请求的 Boost 库

标签 c++ boost c++17

我是 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 的 header ”的目录以及如何将所有内容放在一起的确切含义。

提前谢谢了!

最佳答案

I dragged the boost folder inside of boost_1_72_0 in my project



看起来您刚刚将 boost 源复制到您的项目目录中。
您必须 compile boost ,因为你需要文件系统。或者您可以从以下方面获得 boost :
  • vcpkg - 这对你来说是最简单的方法。我强烈推荐这种方式。
  • Sourceforge .
  • Conan

  • I don't know what's exactly meant by the "root directory"...



    由于您使用的是 boost调用 find_package(Boost) - CMake 使用 FindBoost模块。它将尝试在系统 PATH 中找到您的 boost 安装。变量或其他一些“标准”的地方。您的 boost “安装”并不常见,因此您必须使用 BOOST_ROOT 变量指定 boost 的位置。 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})
    

    关于c++ - (C++17; Boost) CMake 找不到请求的 Boost 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61175465/

    相关文章:

    c++ - 如何使用 C++ Boost 解析 JSON 数组?

    c++ - Boost.Asio 的可扩展性

    c++ - 如何正确安全地为 std::array 实现 C++ 算术运算符?

    c++ - 使用纯c++获取特定路径下的所有目录/文件和子目录(跨平台)

    Windows 7下的C++指针

    boost::shared_ptr vector 的 C++ 静态初始化

    c++ - 在不知道非模板化参数的参数类型的情况下重载模板化 lambda

    c++ - 即使从未调用过,是否也需要拷贝 CTOR?

    c++ - 有没有一种安全的方法可以让 std::thread 作为类的成员?

    c++ - 创建一个唯一的临时目录