/ / CMake prepojenie Boost: nemožno nájsť -lboost_program_options - c ++, boost, cmake

CMake prepojenie Boost: nemožno nájsť -lboost_program_options - c ++, boost, cmake

Chcem použiť podporu Boosts pre príkazový riadokpríznaky v jazyku C ++ v systéme Linux. Používam CMake na vytvorenie aplikácie, ale dostal som chybu "nemôžem nájsť -lboost_program_options". Podpora knižnice boost_program_options bola zostavená nezávisle pomocou bjam a knižnice sú v podadresári stage / lib adresára boost.

Čo funguje: Riešením je pridať knižnicu stage / lib pomocou link_directories, ale CMake Manuálny uvádza:

Upozorňujeme, že tento príkaz je zriedka nevyhnutný. Lokality knižníc vrátené pomocou find_package () a find_library () sú absolútne cesty.

Tak to by nemalo byť potrebné.

Čo chcem mať prácu:

Použitie find_package by malo stačiť, ale to nemôže fungovať, tady je 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)

otázka

Kde je chyba v CMakeLists?

Vopred ďakujem!

odpovede:

2 pre odpoveď č. 1

Najskôr musíte povedať, že potrebujete špecifickú knižnicu komponentov z podpory:

find_package(Boost 1.62.0 COMPONENTS program_options)

Po druhé, vždy použite výstupné premenné z BoostFind.cmake

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

Dokumentácia tu: https://cmake.org/cmake/help/v3.0/module/FindBoost.html

Výstupné premenné sú:

Boost_FOUND - Je pravda, ak boli nájdené hlavičky a požadované knižnice

Boost_INCLUDE_DIRS - Boost obsahuje adresáre

Boost_LIBRARY_DIRS - Adresár odkazov pre Boost knižnice

Boost_LIBRARIES - Booster komponenty knižnice, ktoré majú byť prepojené

atď