CMake + Boost + MSYS2 = "Не могу найти библиотеку буста" - PullRequest
0 голосов
/ 19 марта 2019

Я запустил интернет для решения, и я в замешательстве. В конечном итоге мне нужно создать несколько сред, и пока все хорошо, кроме Windows. (Я хочу придерживаться gcc, поэтому MSYS2 / mingw64 кажется правильным).

По этому вопросу я сократил все до минимума. Несмотря на то, что я уже несколько месяцев работаю в CMake и RTFM-ing, я все еще нахожу CMake непрозрачным, поэтому я ожидаю, что совершаю ошибку noob. (Ха-ха, я старожил, но этот поезд ушел со станции!)

У меня есть последние версии на момент написания:

MSYS2: 20180531 
Cmake: 3.13.3
Boost: 1.69.0
gcc(mingw): 8.3.0

Чтобы гарантировать, что мои библиотеки Boost совместимы среди моих различных сборок, я скачал / собрал их отдельно (вместо pacman -S boost, apt install boost, yum install boost и т. Д.). В конечном счете, основной скрипт сборки будет создавать различные варианты библиотеки Boost по мере необходимости.

Итак, у меня есть структура каталогов, подобная:

~/x/boost/boost_1_69_0/b2-and-the-built-Boost-library
~/x/cmake/cmake-3.13.3/built-cmake-here
~/x/hello_world_cpp/main.cpp
~/x/hello_world_cpp/CMakeLists.cpp

Мой CMakeLists.txt выглядит так:

cmake_minimum_required(VERSION 3.13)
project(hello_world_cpp)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(Boost_DEBUG ON)

set(BOOST_ROOT /home/me/x/boost/boost_1_69_0) # full path just to figure this out
message(STATUS "BOOST_ROOT= ${BOOST_ROOT}")

include_directories(${BOOST_ROOT})

add_executable(hello_world_cpp main.cpp)

find_package(Boost 1.69.0 REQUIRED COMPONENTS program_options )

link_directories(${Boost_LIBRARY_DIRS})
target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES})

main.cpp выглядит так:

#include <iostream>

#include <boost/program_options.hpp>

int main() {
    std::cout << "Hello, World!" << std::endl;

    return 0;
}

(Ха, просто буст #include, даже не любой исполняемый код буста, но, конечно, загрузка CMakeLists.txt все равно не удалась из-за "Не могу найти буст библиотеку")

Вот результат из командной строки: cd ~ / x / hello_world_cpp / cmake-build-debug; cmake ..

-- BOOST_ROOT= /home/x/boost/boost_1_69_0
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1165 ] _boost_TEST_VERSIONS = 1.69.0;1.69
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1167 ] Boost_USE_MULTITHREADED = TRUE
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1169 ] Boost_USE_STATIC_LIBS =
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1171 ] Boost_USE_STATIC_RUNTIME =
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1173 ] Boost_ADDITIONAL_VERSIONS =
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1175 ] Boost_NO_SYSTEM_PATHS =
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1243 ] Declared as CMake or Environmental Variables:
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1245 ]   BOOST_ROOT = /home/x/boost/boost_1_69_0
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1247 ]   BOOST_INCLUDEDIR =
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1249 ]   BOOST_LIBRARYDIR =
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1251 ] _boost_TEST_VERSIONS = 1.69.0;1.69
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1326 ] Include debugging info:
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1328 ]   _boost_INCLUDE_SEARCH_DIRS = /home/x/boost/boost_1_69_0/include;/home/x/boost/boost_1_69_0;PATHS;C:/boost/include;C:/boost;/sw/local/include
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1330 ]   _boost_PATH_SUFFIXES = boost-1_69_0;boost_1_69_0;boost/boost-1_69_0;boost/boost_1_69_0;boost-1_69;boost_1_69;boost/boost-1_69;boost/boost_1_69
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1460 ] guessed _boost_COMPILER = -mgw
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1470 ] _boost_MULTITHREADED = -mt
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1554 ] _boost_RELEASE_ABI_TAG = -
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1556 ] _boost_DEBUG_ABI_TAG = -d
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1619 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = /home/x/boost/boost_1_69_0/lib;/home/x/boost/boost_1_69_0/stage/lib;Boost_INCLUDE_DIR-NOTFOUND/lib;Boost_INCLUDE_DIR-NOTFOUND/../lib;Boost_INCLUDE_DIR-NOTFOUND/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib_boost_LIBRARY_SEARCH_DIRS_DEBUG   = /home/x/boost/boost_1_69_0/lib;/home/x/boost/boost_1_69_0/stage/lib;Boost_INCLUDE_DIR-NOTFOUND/lib;Boost_INCLUDE_DIR-NOTFOUND/../lib;Boost_INCLUDE_DIR-NOTFOUND/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1809 ] Searching for PROGRAM_OPTIONS_LIBRARY_RELEASE: boost_program_options-mgw-mt-;boost_program_options-mgw-mt;boost_program_options-mt-;boost_program_options-mt;boost_program_options-mt;boost_program_options
-- [ C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:1862 ] Searching for PROGRAM_OPTIONS_LIBRARY_DEBUG: boost_program_options-mgw-mt-d-;boost_program_options-mgw-mt-d;boost_program_options-mt-d-;boost_program_options-mt-d;boost_program_options-mt;boost_program_options
CMake Error at C:/msys64/home/x/cmake/cmake-3.13.3/Modules/FindBoost.cmake:2100 (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:19 (find_package)


-- Configuring incomplete, errors occurred!
See also "C:/msys64/home/william/krystallize/client/code/hello_world.cpp/cmake-build-debug/CMakeFiles/CMakeOutput.log".

Заранее благодарен за помощь.

...