2016-04-17 57 views
0

解決済み:なぜ、どのようにして-I〜/ dlib-18.18から-I ../dlib-18.18に変更したのかが完全にわかりません。g ++はインクルードディレクトリを認識しません

私は、dlibライブラリを使用してプログラムをコンパイルするmakefileを作成しようとしています。私はダウンロードし、ライブラリをルートディレクトリにインストールします。

#include "dlib/optimization.h" 
#include <iostream> 

DLIBフォルダがDLIB-18.18内に含まれるとoptimization.hがDLIBフォルダに実際にある次のよう

.cppファイルのヘッダです。

以下は私のメイクファイル(またはその一部)です。関連するディレクトリをCFLAGSに含めました。しかし、コンパイル、それはoptimization.h(そのようなファイルまたはディレクトリ)を見つけることができないと言わ++グラム

EXUCUTABLE = graph 

CXX = g++ 
CXXFLAGS = -I. -I/usr/include/ -I~/dlib-18.18 
FLAGS = -g -O -Wall -Wextra -Werror -Wfatal-errors -std=c++11 -pedantic 

############### Rules ############### 

all: ${EXUCUTABLE} 

clean: 
    rm -f ${EXUCUTABLE} *.o 
## Compile step (.cpp files -> .o files) 

%.o: %.cpp 
    ${CXX} ${FLAGS} ${CXXFLAGS} -c $< 

graph: graph.o 
    ${CXX} ${FLAGS} $^ -o [email protected] 

Output for terminal make

The /dlib-18.18/dlib folder when accessed from the terminal

+0

あなたは '.cpp'と言いますが、ルールは'%.o:%.c'です。 '%.o:%.c%.cpp'や' CXXFLAGS'を設定するべきではありませんか? –

+0

ヘッダーへのパスは '/ dlib-18.18/dlib/optimization.h'ですか?それは2つのカウントで奇妙に見えますが、どちらか一方で間違っている可能性があります。おそらく間違っているのは、ライブラリのヘッダがルートの特別なフォルダにあることです。あなたは '/ usr/include/dlib-18.18'、'。/ dlib-18.18'、または何かを意味していないと確信していますか?次に、ヘッダーは 'dlib-18.18'の' dlib'サブディレクトリに格納されていますか、 '#include" dlib-18.18/optimization.h "'を意味しましたか? –

答えて

0

中にあなたのパターン間違って持って:%.o: %.cは、ルールがあることを示し、 .cファイル(ではなく、 )をコンパイルすることについて。

結果として、このルールは適用されず、GNU MakeはC++コードをコンパイルするための独自のデフォルトルールセットに戻ります。

(あなたがDLIBと一致していると仮定すると、あなたはあなたのC++ファイル用.cpp拡張子を使用している)の代わりにこれを試してみてください:

CXX = g++ 
CXXFLAGS = -I. -I/usr/include/ -I~/dlib-18.18 
FLAGS = -g -O -Wall -Wextra -Werror -Wfatal-errors -std=c++11 -pedantic 

# To get *any* .o file, compile its .cpp file with the following rule. 
%.o: %.cpp 
    $(CXX) $(FLAGS) $(CXXFLAGS) -c $< 

make -Bを実行して、上の-I~/dlib-18.18オプションについては、コンパイラの出力を見ますg ++のコマンドライン。

+0

それを指摘してくれてありがとう。しかし、.cppに.cppを変更した後、私はまだ同じエラー(ディレクトリ/ファイルが見つかりません)を得ています –

+0

あなたの質問を編集し、 'make'の出力をコピー/ペーストできますか? – xbug

+0

makeの出力はそれほど役に立ちません。ファイルが見つからないことを告げるだけです。 –

関連する問題