2016-12-12 4 views
1

Ich möchte Boosts Unterstützung für Befehlszeilen Flags in C++ unter Linux verwenden. Ich benutze CMake, um die Anwendung zu erstellen, aber ich bekomme einen Fehler "nicht gefunden -lboost_program_options". Die Bibliothek boost_program_options wurde unabhängig mit bjam erstellt und die Bibliotheken befinden sich im Unterverzeichnis stage/lib des boost-Verzeichnisses.CMake Verknüpfung Boost: nicht -lboost_program_options

Was funktionierts: Eine Lösung ist die Bühne/lib Bibliothek link_directories hinzufügen, aber die CMake manual Zustände:

Beachten Sie, dass dieser Befehl selten notwendig ist. Die von find_package() und find_library() zurückgegebenen Bibliotheksspeicherorte sind absolute Pfade.

Also das sollte nicht notwendig sein.

Was ich will, Arbeits haben:

verwenden sollte find_package genug sein, aber das funktioniert nicht, hier ist die 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) 

Frage

Wo liegt der Fehler in den CMakeLists?

Vielen Dank im Voraus!

Antwort

2

Zunächst müssen Sie Cmake sagen, dass Sie die spezifische Komponentenbibliothek von boost erfordern:

find_package(Boost 1.62.0 COMPONENTS program_options) 

Zweitens verwenden immer die Ausgangsgrößen von BoostFind.cmake

target_link_libraries(inp_manipulation -static-libgcc -static-libstdc++ ${Boost_LIBRARIES}) 

Dokumentation hier: https://cmake.org/cmake/help/v3.0/module/FindBoost.html

Ausgangsvariablen sind:

Boost_FOUND - Wahr, wenn Kopf- und angeforderten Bibliotheken

gefunden

Boost_INCLUDE_DIRS - Boost-Einfügeverzeichnisse

Boost_LIBRARY_DIRS - Ein Link-Verzeichnisse für Boost-Bibliotheken

Boost_LIBRARIES - Boost-Komponentenbibliotheken zu sein verbunden

usw.

+0

Vielen Dank für die schnelle Antwort, das war in der Tat fehlte. –

+0

@ DA-- es ist nicht ganz deine Schuld - die Dokumentation für CMake ist schockierend - was eine Schande ist, wie es fantastisch ist. Noch ein Hinweis: Vermeiden Sie plattformspezifische Link-Bibliotheken. Verwenden Sie möglichst die CMake-Abstract-Versionen. –