(C ++ 17; Boost) CMake не может найти запрошенные библиотеки Boost - PullRequest
1 голос
/ 12 апреля 2020

Я новичок в C ++ и хочу включить в мой проект библиотеку наддува (в частности, часть файловой системы, которую нужно собрать). Я перепробовал множество решений от других пользователей stackoverflow, но они мне совсем не помогли. Я использую CLion с CMake. Основной. cpp вызывает другие файлы. cpp внутри папки modules / .

Структура файла:

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_1_72_0 в моем проекте (просто чтобы вы знали, что папки libs , et c. Inside) нет

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

Я знаю, что это в основном говорит мне, что я должен сделать, но Я не знаю, что именно подразумевается под «каталогом root» boost, каталогом «содержащим заголовки Boost» и как все собрать вместе.

Большое спасибо заранее!

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Я перетащил папку Boost внутри boost_1_72_0 в моем проекте

Похоже, вы только что скопировали источник Boost в директорию вашего проекта. Вы должны скомпилировать boost, так как вам нужна файловая система. Или вы можете получить повышение от:

  • vcpkg - это самый простой способ для вас. Я настоятельно рекомендую этот способ.

  • Sourceforge .

  • Конан

Я не знаю, что именно означает «каталог root» ...

Поскольку вы используете boost, вызывая find_package(Boost) - CMake использует Модуль FindBoost . Он попытается найти вашу надстройку внутри системной переменной PATH или в других «стандартных» местах. Ваша установка буста не является обычной, поэтому вы должны указать, где находится буст, с переменной 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})
0 голосов
/ 12 апреля 2020

Обычно вам не нужно устанавливать Boost_ARCHITECTURE и Boost_INCLUDE_DIRS CMake делает это за вас.

Когда вы используете find_package с опцией REQUIRED, вам не нужно проверять, библиотека найдена или нет, поскольку CMake выдает ошибку, когда библиотека не найдена.

BOOST_ROOT - это каталог, когда boost установлен или распакован. BOOST_INCLUDEDIR - это каталог с расширенными заголовками (обычно это BOOST_ROOT/boost). Поэтому попробуйте установить полный путь к вашей директории boost_1_72_0 в BOOST_ROOT Переменная CMake.

Также у меня возникла проблема с опцией COMPONENTS. Попробуйте удалить его, если остались ошибки.

...