CMake链接提升:找不到-lboost\u程序\u选项 我想在Linux上使用C++中的命令行标志的支持。我使用CMake来构建应用程序,但是我得到一个错误“找不到-lboost\u program\u options”。库boost_程序_选项是使用bjam独立构建的,库位于boost目录的stage/lib子目录中

CMake链接提升:找不到-lboost\u程序\u选项 我想在Linux上使用C++中的命令行标志的支持。我使用CMake来构建应用程序,但是我得到一个错误“找不到-lboost\u program\u options”。库boost_程序_选项是使用bjam独立构建的,库位于boost目录的stage/lib子目录中,c++,boost,cmake,C++,Boost,Cmake,什么有效:解决方案是使用link_目录添加stage/lib库,但CMake声明: 请注意,此命令很少是必需的。find_package()和find_Library()返回的库位置是绝对路径 所以这应该不是必要的 我想要的工作: 使用find_软件包应该足够了,但这不起作用,以下是CmakeList: cmake_minimum_required(VERSION 3.6) project(inp_manipulation) set(CMAKE_CXX_STANDARD 11) include_

什么有效:解决方案是使用link_目录添加stage/lib库,但CMake声明:

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

所以这应该不是必要的

我想要的工作:

使用find_软件包应该足够了,但这不起作用,以下是CmakeList:

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中的错误在哪里


提前谢谢

首先,您必须告诉cmake您需要boost提供的特定组件库:

find_package(Boost 1.62.0 COMPONENTS program_options)
其次,始终使用BoostFind.cmake中的输出变量

target_link_libraries(inp_manipulation -static-libgcc -static-libstdc++ ${Boost_LIBRARIES})
此处的文档:

输出变量包括:

Boost_FOUND-如果找到头和请求的库,则为True

Boost\u INCLUDE\u DIRS-Boost INCLUDE目录

Boost\u LIBRARY\u DIRS-链接Boost库的目录

Boost\u库-要链接的Boost组件库


etc

谢谢你的快速回答,这确实丢失了。@DA-这不完全是你的错-cmake的文档令人震惊-这是一个遗憾,因为它太棒了。另一个注意事项:避免使用特定于平台的链接库。尽可能使用cmake抽象版本。FWIW,我不需要在find_package命令中有“COMPONENTS program_options”;是
${BOOST_LIBRARIES}
帮助了我。