2009-06-30 11 views
11

Macでcmakeを使ってC++プログラムを構築しています。このboostヘッダファイルが含まれていない理由

#include "boost/filesystem.hpp" 

または

#include <boost/filesystem.hpp> 

は変更されていません、私が使用して上記のどちら:

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

エラーをトリガラインは以下の通りです:コンパイラは私に次のエラーを与えますエラー

私の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を含める「は/ opt /ローカル/含める/」cmakeの処理中にこのフォルダが生成している間

ブーストは、次のようなメッセージを与えるfilesystem.hppを含むフォルダブーストが含まれていますMakefileは、私だけブースト一部をコピー:

-- 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 makeを実行中:

 
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のは、あなたに素敵なエラーメッセージを与えるすべての

+0

"ls /opt/local/include/boost/filesystem.hpp"とはどういう意味ですか? –

+1

include_directories($ {Boost_INCLUDE_DIRS})がadd_executableまたはadd_libraryステートメントに達する前にリストされていることを確認してください。 –

+0

ありがとう...コンパイル時にブーストエラーが出るのを助けるようです。インクルードの前に実行可能な文でサブディレクトリを追加しました。その時点でcmakeはそのサブディレクトリ内のすべてを適用します。あなたは答えでこれを入れた場合、その解決、少なくともこの問題 – Janusz

答えて

15

まずそれを提供するために満足していますコンパイルが開始されるよりもずっと前に、それが見つからなければ失敗した場合は、環境変数BOOST_ROOTを/ opt/local(インストールプレフィックス)に設定します。 また、あなたは、ファイルシステムライブラリにリンクする必要がありますので、あなたがのためにドキュメントを取得するには、シェルで

cmake --help-module FindBoost 

を入力し

target_link_libraries(mytarget ${Boost_FILESYSTEM_LIBRARY}) 

の後に使用するため

FIND_PACKAGE(Boost COMPONENTS filesystem REQUIRED) 

をしたいですあなたのcmakeのインストールでBoost find moduleを起動します。

PS:例

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

Boost_INCLUDE_DIRS歓迎されている質問:) – Janusz

+0

が $がVERBOSE makeを実行してください含ま= 1 と失敗したファイルがコンパイルされた行を表示してください –

+0

http://pastebin.ca/を使用して、あなたのアクションの完全なログへのリンクを送ってください:) –

0

は、あなたが "ブースト/" の部分のないfilesystem.hpp含むしようとしたことがありますか?

+7

ブースト中のすべてのヘッダファイルは#include のようにインクルードするので、が機能しない場合は何も動作しません! –

+0

はい – Janusz

0

私は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}) 
関連する問題