Pregunta

Estoy construyendo mi programa en C ++ con cmake en un Mac. El compilador me da error siguientes:

error: boost/filesystem.hpp: No such file or directory

La línea que desencadena el error es la siguiente:

#include "boost/filesystem.hpp"

o

#include <boost/filesystem.hpp>

¿Cuál de lo anterior que utilizo no cambió el error

Pero en mi CMakeLists.txt incluyo las cabeceras boost de la siguiente manera:

FIND_PACKAGE(Boost) 
MESSAGE("Boost information:") 
MESSAGE("  Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}") 
MESSAGE("  Boost_LIBRARIES: ${Boost_LIBRARIES}") 
MESSAGE("  Boost_LIBRARY_DIRS: ${Boost_LIBRARY_DIRS}") 

INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})

Boost incluye directorios está lleno de "/ opt / local / include /" durante el proceso de cmake y esta carpeta contiene un impulso carpeta que contiene el filesystem.hpp

Boost da los siguientes mensajes mientras se genera el Makefile, sólo copié la parte impulso:

-- Boost version: 1.38.0
-- Found the following Boost libraries:
Boost information:
Boost_INCLUDE_DIRS: /opt/local/include
Boost_LIBRARIES: 
Boost_LIBRARY_DIRS: /opt/local/lib
-- Configuring done

Mientras se ejecuta hacer VERBOSE = 1 Esta línea contiene el error:

cd /Users/janusz/Documents/workspace/ImageMarker/Debug/src && 
/usr/bin/c++ -O3 -Wall -Wno-deprecated -g -verbose -I/Users/janusz/Documents/workspace/ImageMarker/src/. -o CMakeFiles/ImageMarker.dir/FaceRecognizer.cpp.o -c /Users/janusz/Documents/workspace/ImageMarker/src/FaceRecognizer.cpp
/Users/janusz/Documents/workspace/ImageMarker/src/FaceRecognizer.cpp:8:32: error: boost/filesystem.hpp: No such file or directory
make[2]: *** [src/CMakeFiles/ImageMarker.dir/FaceRecognizer.cpp.o] Error 1

¿Entiendes por qué el compilador es no elegir el local de opt / include / /?

Si necesita más información Estoy feliz de proporcionarla

¿Fue útil?

Solución

En primer lugar el uso

FIND_PACKAGE(Boost REQUIRED)

en lugar de

  FIND_PACKAGE(Boost)

Esta cmake manera le dará un mensaje de error bueno si no lo encuentra, mucho antes de que se inicien las compilaciones. Si se produce un error establecer el entorno BOOST_ROOT variable para / opt / local (que es el prefijo de instalación). Además, tendrá que enlazar en la biblioteca de sistema de archivos, por lo que desea

FIND_PACKAGE(Boost COMPONENTS filesystem REQUIRED)

para su uso posterior de

target_link_libraries(mytarget ${Boost_FILESYSTEM_LIBRARY})

Enter

cmake --help-module FindBoost

en el shell para obtener la documentación para el refuerzo encuentran módulo en la instalación de cmake.

PD: Un ejemplo

El CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
project(Foo)

find_package(Boost COMPONENTS filesystem REQUIRED)

include_directories(${Boost_INCLUDE_DIRS})
add_executable(foo main.cpp)
target_link_libraries(foo 
  ${Boost_FILESYSTEM_LIBRARY}
)

main.cpp

#include <boost/filesystem.hpp>
#include <vector>
#include <string>
#include <cstdio>
#include <cstddef>

namespace fs = boost::filesystem;
using namespace std;

int main(int argc, char** argv)
{
  vector<string> args(argv+1, argv+argc);
  if(args.empty())
  {
    printf("usage: ./foo SOME_PATH\n");
    return EXIT_FAILURE;
  }

  fs::path path(args.front());

  if(fs::exists(path))
    printf("%s exists\n", path.string().c_str());
  else
    printf("%s doesn't exist\n", path.string().c_str());

  return EXIT_SUCCESS;
}

Otros consejos

¿Ha tratado de incluir filesystem.hpp sin el "/ boost" parte?

He resuelto un problema similar al añadir algunas líneas en mi CMakeLists.txt.

cmake_minimum_required(VERSION 3.5)
project(MyResource)

function(myresources out_var)
    set(RESULT)
    foreach(in_f ${ARGN})
        file(RELATIVE_PATH src_f ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${in_f})
        set(out_f "${PROJECT_BINARY_DIR}/${in_f}.c")
        add_custom_command(OUTPUT ${out_f}
                COMMAND myresource ${out_f} ${src_f}
                DEPENDS ${in_f}
                WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
                COMMENT "Building binary file for ${out_f}"
                VERBATIM)
        list(APPEND result ${out_f})
    endforeach()
    set(${out_var} "${result}" PARENT_SCOPE)
endfunction()

find_package(Boost COMPONENTS filesystem REQUIRED)
find_path(BOOST_FILESYSTEM_INCLUDE_DIRS boost/filesystem.hpp)

add_executable(myresource myresource.cpp)
target_link_libraries(myresource ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY})
target_include_directories(myresource PUBLIC ${BOOST_FILESYSTEM_INCLUDE_DIRS})
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top