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