not c++ boost cmake clion

not - ¿Cómo incluir una biblioteca externa(boost) en el proyecto CLion C++ con CMake?



cmake clion (2)

Después de pasar toda la tarde hablando sobre el tema, lo resolví yo mismo. Fue un error bastante estúpido y todos los consejos en la respuesta de @Wayxo fueron realmente útiles.

La razón por la que no funcionaba para mí es que escribí #include <boost> en mi archivo test.cpp , que aparentemente está mal. En su lugar, debe consultar directamente los archivos de encabezado que desea incluir, por lo que debe escribir, por ejemplo, #include <boost/thread.hpp> .

Después de todo, una breve secuencia de declaraciones debería ser suficiente para incluir con éxito (e independientemente de la plataforma) un boost en un proyecto de CMake :

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})

Estas líneas están haciendo la magia aquí. Como referencia, aquí hay un archivo completo CMakeLists.txt que utilicé para la depuración en un proyecto de línea de comando separado:

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()

Tengo la siguiente configuración para el desarrollo de C ++:

  • OS X Yosemite
  • CLion 140.2310.6 (una plataforma cruzada C / C ++ - IDE de JetBrains utilizando CMake como sistema de compilación)
  • boost instalado a través de boost brew install boost en /usr/local/Cellar/boost/

Ahora, mi objetivo es configurar un proyecto simple e incluir la biblioteca de boost . Definí solo un archivo test.cpp que se ve así:

#include <iostream> #include <boost> using namespace std; int test() { cout << "Hello, World!" << endl; return 0; }

Mi archivo CMakeLists.txt se ve así:

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})

Cuando construyo el proyecto, recibo el siguiente error:

/Users/nburk/Documents/uni/master/master_thesis/MyProject/test.cpp:2:10: error grave: archivo ''boost'' no encontrado

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

add_library con el ajuste de rutas aquí y allá y también con add_library y target_link_libraries , ninguna de las cuales hizo que el proyecto se construyera con éxito.

¿Alguien puede apuntar en la dirección correcta cómo asegurarse de que puedo incluir la funcionalidad de boost en mi proyecto CLION C ++?

Actualización: gracias a la respuesta de @Wayxo utilicé el siguiente código en mi archivo CMakeLists.txt que:

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})

Ahora supere el archivo no encontrado -error, pero en su lugar obtengo lo siguiente:

Error de CMake en / Applications / CLion EAP.app/Contents/bin/cmake/share/cmake-3.1/Modules/FindBoost.cmake:685 (archivo):

archivo STRINGS "/usr/local/Cellar/boost/1.57.0/boost/version.hpp" no se puede leer.

Pila de llamadas (la más reciente es la primera): CMakeLists.txt: 11 (paquete_buscar)

¿Alguna idea de lo que todavía me estoy perdiendo? La línea referida (685) en FindBoost.cmake es: file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")


Intenta usar CMake paquete_de_respuesta (Boost)

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

Funciona mejor y CMake está hecho para la compilación cruzada y dar un camino absoluto no es bueno en un proyecto CMake.

Editar:

Mira esto también: cómo vincular el programa C ++ con Boost usando CMake

Porque no vincula realmente la biblioteca de impulso a su ejecutable.

CMake con impulso generalmente se ve así:

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()