【问题标题】:CMake linking Boost: cannot find -lboost_program_optionsCMake链接Boost:找不到-lboost_program_options
【发布时间】:2017-04-27 05:48:28
【问题描述】:

我想在 Linux 上使用 Boosts 对 C++ 中命令行标志的支持。我使用 CMake 构建应用程序,但出现错误“找不到 -lboost_program_options”。库 boost_program_options 是使用 bjam 独立构建的,这些库位于 boost 目录的 stage/lib 子目录中。

有什么作用:一种解决方案是使用 link_directories 添加 stage/lib 库,但 CMake manual 声明:

请注意,很少需要此命令。 find_package() 和 find_library() 返回的库位置是绝对路径。

所以这不应该是必要的。

我想要的工作:

使用 find_package 应该足够了,但这不起作用,这里是 CMakeLists:

cmake_minimum_required(VERSION 3.6)
project(inp_manipulation)
set(CMAKE_CXX_STANDARD 11)
include_directories(includes lib/boost_1_62_0 lib/)
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "lib/boost_1_62_0")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "lib/boost_1_62_0/stage/lib")

find_package(Boost 1.62.0)
include_directories(${Boost_INCLUDE_DIR})

file(GLOB SOURCES *.cpp)
set(MAIN_FILE main.cpp)
set(SOURCE_FILES ${SOURCES})

add_executable(inp_manipulation ${MAIN_FILE} ${SOURCE_FILES} )
target_link_libraries(inp_manipulation -static-libgcc -static-libstdc++ boost_program_options)

问题

CMakeLists 中的错误在哪里?

提前致谢!

【问题讨论】:

    标签: c++ boost cmake


    【解决方案1】:

    首先,你必须告诉 cmake 你需要来自 boost 的特定组件库:

    find_package(Boost 1.62.0 COMPONENTS program_options)
    

    其次,始终使用 BoostFind.cmake 中的输出变量

    target_link_libraries(inp_manipulation -static-libgcc -static-libstdc++ ${Boost_LIBRARIES})
    

    此处的文档:https://cmake.org/cmake/help/v3.0/module/FindBoost.html

    输出变量是:

    Boost_FOUND - 如果找到标头和请求的库则为真

    Boost_INCLUDE_DIRS - 提升包含目录

    Boost_LIBRARY_DIRS - Boost 库的链接目录

    Boost_LIBRARIES - 要链接的 Boost 组件库

    【讨论】:

    • 感谢您的快速回答,这确实丢失了。
    • @DA——这不完全是你的错——cmake 的文档令人震惊——这真是太棒了,太可惜了。另一个注意事项:避免特定于平台的链接库。尽可能使用 cmake 抽象版本。
    • FWIW,我确实需要在 find_package 命令中有“COMPONENTS program_options”;是 ${BOOST_LIBRARIES} 帮助了我。
    猜你喜欢
    • 2015-06-16
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 2011-12-26
    • 2022-01-02
    相关资源
    最近更新 更多