Как включить внешнюю библиотеку (boost) в проект CLion C++ с CMake?
у меня есть следующая настройка для разработки C++:
OS X Yosemite
-
CLion 140.2310.6
(кросс-платформа на C/C++в среде IDE от JetBrains, используяCMake
как построить систему) - установлен
boost
viabrew 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()