CMake + Boost + MSYS2 =“找不到增强库”

时间:2019-03-19 02:14:21

标签: boost cmake msys2

我一直在互联网上寻找解决方案,但感到很困惑。最终,我需要在多个环境中进行构建,到目前为止,除了Windows之外,一切都还不错。 (我想坚持使用gcc,所以MSYS2 / mingw64似乎很可行)。

对于这个问题,我已经把事情简化到最低限度了。尽管已经在CMake和RTFM-ing上工作了几个月,但我仍然发现CMake不透明,所以我希望我犯了一个新手错误。 (哈哈,我很老套,但是那列火车已经离开车站了!)

在撰写本文时,我拥有最新版本:

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

为了确保我的Boost库在我的各种内部版本之间是一致的,我分别下载/构建了它们(而不是pacman -S boost,apt安装boost,yum安装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;
}

(哈,只是一个boost #include,甚至没有任何可执行的boost代码,但是由于“找不到boost库”,当然加载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".

在此先感谢您的帮助。

0 个答案:

没有答案