문제

Mac에서 CMake와 함께 C ++ 프로그램을 구축하고 있습니다. 컴파일러는 다음 오류를 제공합니다.

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

오류를 유발하는 선은 다음과 같습니다.

#include "boost/filesystem.hpp"

또는

#include <boost/filesystem.hpp>

내가 사용하는 위의 내용 중 어느 것이 오류가 변경되지 않았는지

그러나 내 cmakelists.txt에는 다음과 같은 방식으로 부스트 헤더를 포함시킵니다.

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

부스트 포함 DIRS는 CMAKE 프로세스 중에 "/opt/local/include/"로 채워져 있으며이 폴더에는 filesystem.hpp가 포함 된 폴더 부스트가 포함되어 있습니다.

Boost는 makefile을 생성하는 동안 다음 메시지를 제공합니다. 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

실행 중에 Verbose = 1을 만들 때이 줄에는 오류가 포함됩니다.

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

컴파일러가/opt/local/include 디렉토리를 선택하지 않는 이유를 이해하십니까?

더 많은 정보가 필요하면 기꺼이 제공합니다.

도움이 되었습니까?

해결책

우선

FIND_PACKAGE(Boost REQUIRED)

보다는

  FIND_PACKAGE(Boost)

이런 식으로 CMake는 컴파일이 시작되기 오래 전에 찾을 수없는 경우 좋은 오류 메시지를 제공합니다. 실패하면 환경 변수 roost_root를 /opt /local (설치 접두사)로 설정하십시오. 또한 파일 시스템 라이브러리에 링크해야하므로 원합니다.

FIND_PACKAGE(Boost COMPONENTS filesystem REQUIRED)

나중에 사용하기 위해

target_link_libraries(mytarget ${Boost_FILESYSTEM_LIBRARY})

입력하다

cmake --help-module FindBoost

CMAKE 설치에서 부스트 찾기 모듈을위한 문서를 얻기 위해 쉘에서.

추신 : 예

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

다른 팁

당신은 포함 시켰습니다 FileSystem.hpp "부스트/"부분없이?

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})
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top