Ho la seguente configurazione per lo sviluppo C++:Come includere la libreria esterna (boost) nel progetto CLion C++ con CMake?
OS X Yosemite
CLion 140.2310.6
(un cross-plattform C/C++ - IDE da JetBrains utilizzandoCMake
come sistema di compilazione)- installato
boost
viabrew install boost
in/usr/local/Cellar/boost/
Ora, il mio obiettivo è impostare un progetto semplice e includere la libreria boost
. Ho definito solo un test.cpp di file che assomiglia a questo:
#include <iostream>
#include <boost>
using namespace std;
int test() {
cout << "Hello, World!" << endl;
return 0;
}
mio CMakeLists.txt file di assomiglia a questo:
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})
Quando costruisco il progetto, ottengo il seguente errore:
/Users/nburk/Documents/uni/master/master_thesis/MyProject/test.cpp:2:10: fatal error: 'boost' file not found
make[3]: *** [CMakeFiles/MyProject.dir/test.cpp.o] Error 1 make[2]: *** [CMakeFiles/MyProject.dir/all] Error 2 make[1]: *** [CMakeFiles/MyProject.dir/rule] Error 2 make: *** [MyProject] Error 2
ho suonato in giro con regolazione percorsi qua e là e anche utilizzando add_library
e target_link_libraries
, nessuno dei quali ha consentito la corretta realizzazione del progetto.
Qualcuno può indicare nella giusta direzione come assicurarsi di poter includere le funzionalità di boost
nel mio progetto CLion C++?
Update: Grazie a @ risposta di Waxo ho usato il seguente codice nel mio CMakeLists.txt file di cui:
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})
io ora ho passato il file non trovato -Errore, ma invece ottengo il seguente:
CMake Error at /Applications/CLion EAP.app/Contents/bin/cmake/share/cmake-3.1/Modules/FindBoost.cmake:685 (file):
file STRINGS file "/usr/local/Cellar/boost/1.57.0/boost/version.hpp" cannot be read.
Call Stack (most recent call first): CMakeLists.txt:11 (find_package)
Qualche idea di cosa mi manca ancora? La linea di cui (685) in FindBoost.cmake è: file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")
Non impostare manualmente le variabili 'Boost'. 'find_package' dovrebbe funzionare immediatamente. In caso contrario, dovresti passare 'Boost_DIR' al comando' cmake'. Non scrivere percorsi specifici del sistema in CMakeLists.txt. L'intero punto di cmake è di essere multipiattaforma. La configurazione specifica della piattaforma dovrebbe essere raramente richiesta e, se è il modo per farlo, è necessario passare i parametri di configurazione tramite la riga di comando o tramite cmake-gui. – sbabbi
se non lo includo, torno al ** file non trovato ** - errore ... tuttavia, sono sicuro che mi manca qualcos'altro e il tuo consiglio sembra avere senso per me! il mio problema principale è che non riesco a capire alcune delle nozioni di base su come funziona effettivamente CMake, quindi suppongo di dover sedermi e fare i compiti perché non riesco a trovare una soluzione banale ... – nburk
Ho notato ora che l'installazione boost è in un percorso non standard ('/ usr/local/cellar'). [Il modo corretto] (http://www.cmake.org/cmake/help/v3.0/module/FindBoost.html) per notificare cmake alla ricerca di boost in quella directory è invocare cmake con 'cmake -DBOOST_ROOT = /usr/local/Cellar/boost/1.57.0 ... ' – sbabbi