/ / cmake не може шукати каталог зовнішньої бібліотеки (boost) - c ++, boost, cmake

cmake не може знайти зовнішню бібліотеку (boost) каталог - c ++, boost, cmake

Я намагаюся використовувати cmake для створення простого проекту-парсера. Я використовував boost :: program_options в моєму коді, але, схоже, cmake не шукає каталогу boost lib. Смути і розчарування ..

Мій CMakeLists.txt є

# basic info
CMAKE_MINIMUM_REQUIRED(VERSION 3.1.0)
PROJECT(parser CXX)
SET(CMAKE_CXX_STANDARD 14)

# Boost
FIND_PACKAGE(Boost 1.61.0 REQUIRED PATHS /path/to/boost NO_DEFAULT_PATH)
MESSAGE(STATUS "Boost version: ${Boost_VERSION}" )
MESSAGE(STATUS "Boost include dirs: ${Boost_INCLUDE_DIRS}" )
MESSAGE(STATUS "Boost library dirs: ${Boost_LIBRARY_DIRS}" )
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})

# main
FILE(GLOB main_SRC *.cpp)
ADD_EXECUTABLE(main ${main_SRC})
TARGET_LINK_LIBRARIES(main boost_program_options)

Я використовую модифікований BoostConfig.cmake (який вказує на мою власну бібліотеку Boost)

Результат для бігу cd build; cmake .. є

-- Boost version: 1.61.0
-- Boost include dirs: /path/to/boost/include
-- Boost library dirs: /path/to/boost/lib
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

Таким чином, я вірю, що cmake знайшов мою бібліотеку Boost. Але тоді, якщо я біжу зробити Я закінчуся купою помилок, як

undefined reference to `boost::program_options ... `

Якщо я біжу зробити VERBOSE = 1 я побачу

/path/to/g++ -rdynamic CMakeFiles/main.dir/main.cpp.o -o main -lboost_program_options

команда не має -L або -Wl, rpath для $ {Boost_LIBRARY_DIRS}. Якщо я додаю прапор вручну, то я зможу успішно скомпілювати проект.

Я також спробував приєднатись до статичного lib через TARGET_LINK_LIBRARIES (основний $ {Boost_LIBRARY_DIR} /libboost_program_options.a) замість LINK_DIRECTORIES (), але та ж помилка була кинута.

Не впевнений, що робить речі неправильними .. Спасибі заздалегідь

Відповіді:

0 для відповіді № 1

Що відбувається зі стандартним методом із використанням імпортованих цілей? Це,

# Use and set variable/-Dflag/environment for custom Boost location
set(BOOST_ROOT /path/to/boost)
find_package(Boost 1.61.0 REQUIRED
COMPONENTS program_options)
add_executable(main ...)
target_link_libraries(main Boost::program_options)