0
我想用cmake来构建一个简单的解析器项目。我在我的代码中使用了boost :: program_options,但似乎cmake没有查找boost lib目录。感到困惑和沮丧..cmake无法查找外部库(boost)目录
我的CMakeLists.txt是
# basic info
CMAKE_MINIMUM_REQUIRED(VERSION 3.1.0)
PROJECT(parser CXX)
SET(CMAKE_CXX_STANDARD 14)
# Boost
FIND_PACKAGE(Boost 1.61.0 REQUIRED PATHS /path/to/boost NO_DEFAULT_PATH)
MESSAGE(STATUS "Boost version: ${Boost_VERSION}")
MESSAGE(STATUS "Boost include dirs: ${Boost_INCLUDE_DIRS}")
MESSAGE(STATUS "Boost library dirs: ${Boost_LIBRARY_DIRS}")
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
# main
FILE(GLOB main_SRC *.cpp)
ADD_EXECUTABLE(main ${main_SRC})
TARGET_LINK_LIBRARIES(main boost_program_options)
我使用修改后的BoostConfig.cmake(这点我自己的Boost库)
运行CD生成结果; cmake的..是
-- Boost version: 1.61.0
-- Boost include dirs: /path/to/boost/include
-- Boost library dirs: /path/to/boost/lib
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build
因此我相信cmake的找到了我的Boost库。不过,如果我跑使我将结束与一堆错误像
undefined reference to `boost::program_options ... `
如果我运行使VERBOSE = 1我会看到
/path/to/g++ -rdynamic CMakeFiles/main.dir/main.cpp.o -o main -lboost_program_options
的命令没有 - L或-Wl,rpath为$ {Boost_LIBRARY_DIRS}。如果我手动添加标志,那么我可以成功编译项目。
我也试图通过TARGET_LINK_LIBRARIES(主要$ {} Boost_LIBRARY_DIR /libboost_program_options.a)的代替LINK_DIRECTORIES()链接到静态库,但被抛出同样的错误。
不知道是什么让事情错了.. 预先感谢
仅供参考我使用的cmake 3.8.0和g ++ 7.1.0 .. –
随着CMake的,你不应该明确链接库,而是使用模块提供的目标来代替。另见:[CMake-FindBoost](https://cmake.org/cmake/help/latest/module/FindBoost.html) – Drop