cmake无法查找外部库(boost)目录

时间:2017-06-22 04:14:08

标签: c++ boost cmake

我正在尝试使用cmake来构建一个简单的解析器项目。我在我的代码中使用了boost :: program_options,但似乎cmake没有查找boost lib目录。感到困惑和沮丧......

我的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 build的结果; 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库。但是如果我运行 make ,我最终会遇到一堆错误,比如

undefined reference to `boost::program_options ... `

如果我运行 make VERBOSE = 1 ,我会看到

/path/to/g++ -rdynamic CMakeFiles/main.dir/main.cpp.o -o main -lboost_program_options

该命令没有-L或-Wl,$ {Boost_LIBRARY_DIRS}的rpath。如果我手动添加标志,那么我可以成功编译项目。

我还尝试通过 TARGET_LINK_LIBRARIES(主$ {Boost_LIBRARY_DIR} /libboost_program_options.a)而不是 LINK_DIRECTORIES()链接到静态库,但是引发了同样的错误。

不确定是什么造成了错误.. 提前致谢

1 个答案:

答案 0 :(得分:0)

使用导入目标的标准方法会发生什么?也就是说,

'a' evaluates to TRUE if IN ('x', 'y') 
'a' also evaluates to TRUE if it equals z.