2016-12-12 170 views
1

我想在Linux上使用Boost支持C++中的命令行標誌。我使用CMake構建應用程序,但出現錯誤「找不到-lboost_program_options」。庫boost_program_options是使用bjam獨立構建的,並且庫位於boost目錄的stage/lib子目錄中。CMake鏈接Boost:找不到-lboost_program_options

什麼工作:一種解決方法是添加使用link_directories舞臺/ lib庫,但CMake的manual狀態:

注意,這個命令很少是必要的。 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中的錯誤?

提前致謝!

回答

2

首先,你必須告訴你需要從提升的具體組件庫cmake的:

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_LIBRARY_DIRS - 鏈接目錄爲Boost庫

Boost_LIBRARIES - 升壓組件庫是linked

+0

謝謝你的快速回答,這確實是缺少的。 –

+0

@ DA--這不完全是你的錯 - cmake的文檔令人震驚 - 這真是太遺憾了,因爲它太棒了。 另一個說明:避免平臺特定的鏈接庫。儘可能使用cmake抽象版本。 –