【问题标题】:find_package() doesn't detect boost on Windows Cmakefind_package() 未检测到 Windows Cmake 上的提升
【发布时间】:2014-01-24 23:55:36
【问题描述】:

我使用的是 Windows 系统。我想通过 CMake 使用 Boost 库。 我已经在 C:\boost_1_55_0\ 上安装了 boost 这是我的 CMakeLists.txt 文件

set(Boost_USE_STATIC_LIBS        ON)
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME    OFF)
find_package(Boost 1.55.0 COMPONENTS thread)

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS}) 
    LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
    add_executable (linking_with_boost main.cc sqr.cc)
    target_link_libraries(linking_with_boost ${Boost_LIBRARIES})
else()
    message(STATUS "Fail  asdasd!")
endif()

我得到了——找不到 Boost 输出:

$ cmake ../
-- Could NOT find Boost
-- Fail  asdasd!
-- Configuring done
-- Generating done
-- Build files have been written to: D:/ubuntu_share/programming/C++/practice/cm
ake/linking_with_boost/build_win

【问题讨论】:

  • 在再次运行cmake 之前尝试设置BOOST_ROOT=C:\boost_1_55_0。另请查看cmake --help-module FindBoost 以获得更多帮助。
  • 这有帮助。谢谢。请作为答案。准确地说应该是“set(BOOST_ROOT C:/boost_1_55_0)
  • 您不必将 set(... 放入您的 CMakeLists.txt 中!在调用cmake之前设置一个环境变量。

标签: visual-studio-2010 boost cmake


【解决方案1】:

在 Windows 7 x64 上,我将 Boost 1.58 安装到 C:\SDKs\boost_1_58_0。为了让 cMake 找到所有合适的文件,我不得不添加以下三个系统变量:

BOOST_INCLUDEDIR C:\SDKs\boost_1_58_0\ BOOST_LIBRARYDIR C:\SDKs\boost_1_58_0\lib64-msvc-12.0 BOOST_ROOT C:\SDKs\boost_1_58_0\boost

【讨论】:

  • 唯一有效的解决方案
【解决方案2】:

除了 BOOST_ROOT 我还必须设置 BOOST_LIBRARYDIR 变量才能成功。就我而言,这是 c:\Program Files\boost_1_56_0\lib64-msvc-12.0

【讨论】:

  • 这是因为 BOOST_LIBRARYDIR 被定义为 ` BOOST_LIBRARYDIR - 首选库目录,例如/lib` 和 `BOOST_ROOT(或 BOOSTROOT)- 首选安装前缀
【解决方案3】:

在运行cmake之前,需要将环境变量BOOST_ROOT设置为c:\boost_1_55_0。另请查看cmake --help-module FindBoost 以获得更多帮助。

【讨论】:

    【解决方案4】:

    我在这个问题上花了很多时间,最后通过使用 FindBoost 手册中列出的一些变量来解决它https://cmake.org/cmake/help/v3.0/module/FindBoost.html

    以下变量帮助了我:

    set (Boost_DETAILED_FAILURE_MSG ON)
    set (Boost_THREADAPI win32)
    set (BOOST_ROOT "/boost_1_40_0")
    set (Boost_LIBRARY_DIR  "/boost_1_40_0/lib")
    set (Boost_COMPILER "-vc")
    set (Boost_USE_STATIC_RUNTIME ON)  
    set (Boost_DEBUG ON)  #<---------- Real life saver
    

    【讨论】:

    • 到目前为止唯一对我有帮助的答案
    • 我必须比在其他平台上更具体,因为 b2 --layout=versioned 是 Windows 的默认值,而 b2 --layout=system 是其他平台的默认值。并且该参数记录不足:stackoverflow.com/questions/8940249/…。它也不能真正帮助您将其从默认值切换。特别是,我必须包括上面的编译器名称。
    【解决方案5】:

    然后构建,不要忘记为获胜路径转义符号。我使用了与上一个答案示例相同的这个,它有效。构建(helpful docs on boost.org),然后使用 CMakeLists.txt

        cmake_minimum_required(VERSION 3.4.0) 
        project(name_me_correctly_pls VERSION 1.0)
        set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/build)
        set(SOURCE_EXE main.cpp) 
        include_directories(${Boost_INCLUDE_DIRS})
        add_executable(some_exe ${SOURCE_EXE})  # Создает исполняемый файл
        set (Boost_THREADAPI win32)
        set (BOOST_ROOT "C:\\local\\boost_1_69_0\\boost")
        set (Boost_LIBRARY_DIR  "C:\\local\\boost_1_69_0\\lib64-msvc-14.1")
        set (Boost_COMPILER "-vc")
        set (Boost_USE_STATIC_RUNTIME ON)  
        set (Boost_DEBUG ON)
        find_package(Boost REQUIRED)
        include_directories(${Boost_INCLUDE_DIR})
        target_link_libraries(some_exe ${Boost_SYSTEM_LIBRARY})
    

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多