簡體   English   中英

(C++17; Boost) CMake 無法找到請求的 Boost 庫

[英](C++17; Boost) CMake unable to find the requested Boost libraries

我是 C++ 的新手,想在我的項目中包含 boost 庫(特別是需要構建的文件系統部分)。 我嘗試了其他 stackoverflow 用戶的許多解決方案,但他們根本沒有幫助我。 我正在使用帶有 CMake 的 CLion。 main.cpp 正在調用modules/文件夾中的 other.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})

output.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 的標頭”的目錄以及如何將所有內容放在一起的確切含義。

提前謝謝了!

我在我的項目中將 boost_1_72_0 中的 boost 文件夾拖到了里面

看起來您剛剛將 boost 源復制到您的項目目錄中。 你必須編譯boost 因為你需要文件系統。 或者您可以從以下方面獲得提升:

  • vcpkg - 這對您來說是最簡單的方法。 我強烈推薦這種方式。

  • 源鍛

  • 柯南

我不知道“根目錄”的確切含義......

由於您通過調用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})

通常,您不需要設置Boost_ARCHITECTUREBoost_INCLUDE_DIRS CMake 會為您完成。

當您使用帶有REQUIRED選項的find_package時,您不需要檢查是否找到庫,因為 CMake 在找不到庫時會引發錯誤。

BOOST_ROOT是 boost 安裝或解壓時的目錄。 BOOST_INCLUDEDIR是一個帶有 boost 標頭的目錄(通常是BOOST_ROOT/boost )。 因此,嘗試將boost_1_72_0目錄的完整路徑設置為BOOST_ROOT CMake 變量。

另外,我對COMPONENTS選項有疑問。 如果錯誤仍然存在,請嘗試將其刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM