我想在Linux上使用C++中对命令行标志的增强支持。我使用CMake来构建应用程序,但是我得到了一个错误“无法找到-lboost_program_options”。库boost_program_options是使用bjam独立构建的,库位于boost目录的stage/lib子目录中。
工作的:一个解决方案是使用link_directories添加stage/lib库,但是CMake 手册声明:
注意,这个命令很少是必需的。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中的错误在哪里?
提前感谢!
发布于 2016-12-12 11:18:50
首先,您必须告诉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包括目录 Boost_LIBRARY_DIRS -链接Boost库的目录 要链接的Boost_LIBRARIES - Boost组件库
等
https://stackoverflow.com/questions/41099549
复制相似问题