我正在尝试使用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()链接到静态库,但是引发了同样的错误。
不确定是什么造成了错误.. 提前致谢
答案 0 :(得分:0)
使用导入目标的标准方法会发生什么?也就是说,
'a' evaluates to TRUE if IN ('x', 'y')
'a' also evaluates to TRUE if it equals z.