CMake链接Boost:找不到-lboost_program_options

时间:2016-12-12 11:10:56

标签: c++ boost cmake

我想在Linux上使用C ++中的命令行标志的Boosts支持。我使用CMake构建应用程序,但是我收到错误"找不到-lboost_program_options"。使用bjam独立构建库boost_program_options,并且这些库位于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中的错误在哪里?

提前致谢!

1 个答案:

答案 0 :(得分:2)

首先,您必须告诉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 - 如果找到标题和请求的库,则为True

     

Boost_INCLUDE_DIRS - Boost包含目录

     

Boost_LIBRARY_DIRS - Boost库的链接目录

     

Boost_LIBRARIES - 提升要链接的组件库