Question

Je construis mon c ++ programme avec CMake sur un Mac. Le compilateur me donne l'erreur suivante:

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

La ligne qui déclenche l'erreur est le suivant:

#include "boost/filesystem.hpp"

ou

#include <boost/filesystem.hpp>

Laquelle de ce qui précède, je ne l'utilise pas modifié l'erreur

Mais dans mon CMakeLists.txt j'inclure les en-têtes de boost de la façon suivante:

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 comprennent dirs est rempli avec "/ opt / local / include /" au cours du processus de CMake et ce dossier contient un coup de pouce du dossier qui contient le filesystem.hpp

Boost donne les messages suivants tout en générant le Makefile, je ne copiais la partie boost:

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

Lors de l'exécution faire verbose = 1 Cette ligne contient l'erreur:

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

Comprenez-vous pourquoi le compilateur ne sélectionne pas le / opt / local / include?

Si vous avez besoin de plus amples informations, je suis heureux de fournir

Était-ce utile?

La solution

Tout d'abord, l'utilisation

FIND_PACKAGE(Boost REQUIRED)

plutôt que

  FIND_PACKAGE(Boost)

Cette CMake façon vous donnera un beau message d'erreur si elle ne trouve pas, bien avant que les compilations sont mis en marche. Si elle ne parvient pas réglé sur / opt / local l'environnement BOOST_ROOT variable (qui est le préfixe d'installation). De plus, vous devrez créer un lien dans la bibliothèque de système de fichiers, si vous voulez

FIND_PACKAGE(Boost COMPONENTS filesystem REQUIRED)

pour une utilisation ultérieure de

target_link_libraries(mytarget ${Boost_FILESYSTEM_LIBRARY})

Entrée

cmake --help-module FindBoost

à la coquille pour obtenir la documentation pour le module trouver Boost dans votre installation de CMake.

PS: Un exemple

Le 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;
}

Autres conseils

Avez-vous essayé, y compris filesystem.hpp sans la partie "boost /"?

Je résolu un problème similaire en ajoutant quelques lignes dans mon 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})
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top