Компиляция C ++ с Boost 1.68.0 в Windows с использованием CMake и MinGW - PullRequest
0 голосов
/ 18 ноября 2018

Я хочу использовать библиотеку Boost на Windows, но это было хлопотно.Я скачал пакет Windows с здесь и распаковал его в C:\Boost:

Я добавил следующее к своемуCMake file:

find_package(Boost 1.68 REQUIRED COMPONENTS filesystem)
# ...
target_link_libraries(MyExecutable ${Boost_LIBRARIES})

Я получаю следующую ошибку CMake:

C:\Users\User\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\183.4284.104\bin\cmake\win\bin\cmake.exe -DCMAKE_BUILD_TYPE=Debug "-DCMAKE_MAKE_PROGRAM=C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/mingw32-make.exe" "-DCMAKE_C_COMPILER=C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/x86_64-w64-mingw32-gcc.exe" "-DCMAKE_CXX_COMPILER=C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/x86_64-w64-mingw32-g++.exe" -G "CodeBlocks - MinGW Makefiles" D:\Cpp\MyProject
CMake Error at C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:2048 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.68.0

  Boost include path: C:/Boost

  Could not find the following Boost libraries:

          boost_filesystem

  Some (but not all) of the required Boost libraries were found.  You may
  need to install these additional Boost libraries.  Alternatively, set
  BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT
  to the location of Boost.
Call Stack (most recent call first):
  CMakeLists.txt:6 (find_package)


-- Configuring incomplete, errors occurred!
See also "D:/Cpp/MyProject/cmake-build-debug/CMakeFiles/CMakeOutput.log".

[Failed to reload]

По-видимому, не удается найти filesystem, но он есть в C:\Boost\boost\filesystem ( здесь - документация по FindBoost).enter image description here

Как настроить файл CMake для правильного использования Boost?Я также попытался установить переменные окружения Boost, но это все равно не сработало:

SET (BOOST_ROOT "c:/Boost")
SET (BOOST_INCLUDEDIR "c:/Boost/boost")
SET (BOOST_LIBRARYDIR "c:/Boost/libs")

FIND_PACKAGE(Boost 1.68.0 REQUIRED COMPONENTS filesystem)

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Не полностью связано, но я думаю, что ваша строка ссылки неверна, вместо:

target_link_libraries(MyExecutable Boost::filesystem)

это должно сказать:

target_link_libraries(MyExecutable ${Boost_LIBRARIES})

Boost_LIBRARIES определяется автоматически, когда Boost найден, поэтому он бесплатный.

0 голосов
/ 18 ноября 2018

Кроме того, Boost говорит, что большинство вещей не нужно компилировать, поэтому я этого не делал.

Не удается найти библиотеку boost :: filesystem. Потому что boost :: filesystem - одна из немногих библиотек, которые нужно скомпилировать (все, что вы должны указать в команде find package , имеют для компиляции).

Сначала вам нужно создать boost:

./booststrap.sh

А потом:

bjam

Он выбирает любой доступный компилятор, поэтому вам, возможно, придется вручную установить подходящий набор инструментов.

...