2016-04-17 142 views
0

已解決:我不完全確定爲什麼以及如何,但是當我從-I〜/ dlib-18.18更改爲-I ../ dlib-18.18時,它就可以工作。g ++無法識別包含目錄

我想編寫一個使用dlib庫編譯程序的makefile。我已經下載並安裝在根目錄中的庫。

.cpp文件的頭如下:

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

DLIB文件夾包括在DLIB-18.18和optimization.h確實DLIB文件夾內。

下面是我的makefile(或其中的一部分)。我已將相關目錄包含在CFLAGS中。然而,在編譯過程中,G ++說,它無法找到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'?這在兩個方面似乎很奇怪,其中一個可能是錯誤的。可能錯誤的是,你會在根目錄中的一個特殊文件夾中有一個庫的頭文件。你確定你不是指'/ usr/include/dlib-18.18','。/ dlib-18.18'或其他什麼嗎?其次,頭文件存儲在'dlib-18.18'的'dlib'子目錄中,還是你的意思是'#include「dlib-18.18/optimization.h」'? –

回答

0

你有你的方式不對:%.o: %.c表示該規則關於編譯.c文件(不是.cpp文件)。

因此,此規則不適用,並且GNU Make會回退到它自己的用於編譯C++代碼的默認規則集。

試試這個(假設你與DLIB一致,您使用的.cpp擴展你的C++文件):

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

謝謝你指出。但是,將.c更改爲.cpp後,我仍然收到相同的錯誤(目錄/文件未找到) –

+0

您能編輯您的問題並複製/粘貼'make'的輸出嗎? – xbug

+0

make的輸出並不是很有幫助,它只是在喊我找不到文件 –