我想在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中的错误在哪里?
提前致谢!
答案 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 - 提升要链接的组件库
等