【问题标题】:Cmake cannot find boost libraryCmake 找不到 boost 库
【发布时间】:2015-08-16 17:49:56
【问题描述】:

我在 Mac OS X 上,使用以下 CMake 文件,并在 /usr/local/lib/boost_1_58_0 上安装了 Boost v1.58.0,每次运行 cmake 时都会打印“找不到 Boost”。我已经阅读了所有关于如何使它工作的堆栈溢出帖子,但没有任何效果。有什么我只是想念的吗?

cmake_minimum_required (VERSION 3.1)
project (HelloWorld)

set (CMAKE_CXX_FLAGS "--std=gnu++11 ${CMAKE_C_FLAGS}")
file (GLOB SOURCE_FILES "source/*.cpp")

set (CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} /usr/local/lib/boost_1_58_0/boost)
set (CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /usr/local/lib/boost_1_58_0/stage/lib)

set (Boost_NO_BOOST_CMAKE ON)   
set (BOOST_NO_SYSTEM_PATHS ON)
set (BOOST_ROOT /usr/local/lib/boost_1_58_0)
set (BOOST_INCLUDEDIR /usr/local/lib/boost_1_58_0/boost)
set (BOOST_LIBRARYDIR /usr/local/lib/boost_1_58_0/stage/lib)

set (Boost_USE_STATIC_LIBS OFF)
set (Boost_USE_MULTITHREADED ON)
set (Boost_USE_STATIC_RUNTIME OFF)
find_package (Boost 1.58.0 COMPONENTS optional)

if (Boost_FOUND)
    include_directories (${Boost_INCLUDE_DIRS})
    target_link_libraries (helloworld ${Boost_LIBRARIES})
endif ()

include_directories ("source")
add_executable (helloworld ${SOURCE_FILES})

【问题讨论】:

  • 想通了。 optional 实际上不是一个库,因为它只是标题。
  • 风格和可移植性点:您不应该在 CMakeLists.txt 中定义任何特定于系统的内容,例如 BOOST_ROOT、BOOST_INCLUDEDIR 和 BOOST_LIBRARYDIR。如果您确实需要设置这些,请在命令行上使用 -D 进行设置。整个第一个 boost 节可​​以省略,对于 include 和 library path set 命令也是如此——单独使用 include_directories(${Boost_INCLUDE_DIRS})。
  • 附加可移植性注释:您使用 --std=gnu++11 但 CMake 提供编译功能以将任何受支持的编译器置于适当的模式。另外,不要将 C 标志附加到 CXX 标志上。此外,target_link_libraries 应该真正出现在 add_executable 之后,因为此时目标不存在。
  • 关于 MacOS X 上 Boost 的最后说明:您尝试过自制软件吗?我使用它来提供 Boost 和许多其他用于开发的库。它开箱即用,无需特殊设置。如果它能让您的生活更轻松,我们是否值得一看。
  • 感谢您的提示。真的是第一次用cmake,感觉要拔牙了。

标签: c++ c++11 boost cmake


【解决方案1】:

这很糟糕,因为 optional 不是库,它只是标题,因此将其更改为 find_package (Boost 1.58.0) 解决了问题。

【讨论】:

    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2019-12-29
    • 2020-11-29
    • 2017-07-19
    • 2012-08-14
    相关资源
    最近更新 更多