Как включить внешнюю библиотеку (boost) в проект CLion C++ с CMake?

у меня есть следующая настройка для разработки C++:

  • OS X Yosemite
  • CLion 140.2310.6 (кросс-платформа на C/C++в среде IDE от JetBrains, используя CMake как построить систему)
  • установлен boost via brew install boost на /usr/local/Cellar/boost/

Итак, моя цель-настроить простой проект и включить boost библиотека. Я определил только один .cpp файл, который выглядит так:

#include <iostream>
#include <boost>

using namespace std;

int test() {
    cout << "Hello, World!" << endl;
    return 0; 
}

мой CMakeLists.txt файл выглядит так:

cmake_minimum_required(VERSION 2.8.4) 
project(MyProject)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

include_directories("/usr/local/Cellar/boost/1.57.0/include/boost")

set(SOURCE_FILES main.cpp ./test.cpp)
add_executable(MyProject ${SOURCE_FILES}) 

когда я создаю проект, я получаю следующую ошибку:

/ Users/nburk/Documents/uni/master/master_thesis/MyProject / test.cpp: 2: 10: фатальная ошибка: файл "boost" не найден

make[3]: * * * [CMakeFiles/MyProject.реж/тест.СРР.o] Ошибка 1 make[2]: * * * [CMakeFiles/MyProject.dir/ all] Ошибка 2 make[1]: * * * [CMakeFiles/MyProject.dir/ rule] Ошибка 2 сделать: * * * [MyProject] Ошибка 2

я играл с регулировкой путей здесь и там, а также с помощью add_library и target_link_libraries, ни один из которых не сделал проект построить успешно.

может кто-то указать в правильном направлении, как убедиться, что я могу включить boostфункциональность s в мой проект CLion c++?

обновление: Благодаря ответу @Waxo я использовал следующий код в моем CMakeLists.txt который:

set(Boost_INCLUDE_DIR /usr/local/Cellar/boost/1.57.0)
set(Boost_LIBRARY_DIR /usr/local/Cellar/boost/1.57.0/lib)
find_package(Boost COMPONENTS system filesystem REQUIRED)
include_directories(${Boost_INCLUDE_DIR})

я теперь прошел не нашел-ошибка, но вместо этого я получаю следующее:

ошибка CMake в / приложения / CLion ВП.app / содержание / bin / cmake / share / cmake-3.1 / модули / FindBoost.с CMake:685 (файл):

строки файла "/usr/местные/погреб/повышение/1.57.0/повышение/версия.ГЭС" не может быть прочитан.

стек вызовов (последнего): CMakeLists.txt: 11 (find_package)

есть идеи, что мне все еще не хватает? Указанная строка (685) в FindBoost.с CMake это: file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")

2 ответов


проведя весь день над этим вопросом, я решил его сам. Это была довольно глупая ошибка, и все намеки в ответе @Waxo были действительно полезны.

причина, по которой это не работало для меня, что я написал #include <boost> в свою :

find_package(Boost 1.57.0 COMPONENTS system filesystem REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(BoostTest main.cpp)
target_link_libraries(BoostTest ${Boost_LIBRARIES})

эти линии делают магию здесь. Для справки, вот полный CMakeLists.txt файл, который я использовал для отладки в отдельном проекте командной строки:

cmake_minimum_required(VERSION 2.8.4)

project(BoostTest)

message(STATUS "start running cmake...")

find_package(Boost 1.57.0 COMPONENTS system filesystem REQUIRED)

if(Boost_FOUND)

    message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
    message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
    message(STATUS "Boost_VERSION: ${Boost_VERSION}")

    include_directories(${Boost_INCLUDE_DIRS})

endif()

add_executable(BoostTest main.cpp)

if(Boost_FOUND)

    target_link_libraries(BoostTest ${Boost_LIBRARIES})

endif()

попробуйте использовать CMake find_package (Boost)

src:http://www.cmake.org/cmake/help/v3.0/module/FindBoost.html

он работает лучше, и CMake сделан для перекрестной компиляции, и предоставление абсолютного пути не является хорошим в проекте CMake.

Edit:

взгляните на это : как связать программу C++ с Boost с помощью CMake

потому что вы не связываете библиотеку boost с вашей выполнимый.

CMake с boost обычно выглядит так:

set(Boost_USE_STATIC_LIBS        ON) # only find static libs
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME    OFF)
find_package(Boost 1.57.0 COMPONENTS date_time filesystem system ...)
if(Boost_FOUND)
  include_directories(${Boost_INCLUDE_DIRS})
  add_executable(foo foo.cc)
  target_link_libraries(foo ${Boost_LIBRARIES})
endif()