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ď č. 1Najskô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ď