2016-12-12 2 views
1

Я хочу использовать поддержку Boosts для флагов командной строки в C++ в Linux. Я использую CMake для создания приложения, но получаю сообщение об ошибке «не могу найти -lboost_program_options». Библиотека boost_program_options была создана независимо с помощью bjam, а библиотеки находятся в подкаталоге stage/lib каталога boost.CMake linking Boost: не удается найти -lboost_program_options

Что работает: Решение состоит в том, чтобы добавить этап/Библиотека библиотеки с использованием link_directories, но штаты 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 включает директории

Boost_LIBRARY_DIRS - Link каталогов для библиотек буста

Boost_LIBRARIES - библиотеки подталкивания компоненты, взаимосвязано

и т. Д.

+0

Благодарим за быстрый ответ, этого действительно не хватало. –

+0

@ DA-- это не совсем ваша ошибка - документация для cmake шокирует - это позор, как это фантастика. Другое примечание: избегайте библиотек ссылок на платформу. По возможности используйте абстрактные версии cmake. –