2011-07-31 201 views
3

我的Gentoo Linux上的Makefiles有問題。具有相對路徑的Makefile?

這裏是我的文件夾層次:

Development 
-> GLTools 
    -> include  
    -> src 

->Triangle  
    ->triangle.cpp  
    ->Makefile 

和我的Makefile:

MAIN = triangle 
SRCPATH = ./ 
SHAREDPATH = ../GLTools/src/ 
SHAREDINCPATH = ../GLTools/include/ 
LIBDIRS = -L/usr/local/lib 
INCDIRS = -I/usr/include -I/usr/local/include -I/usr/include/GL \  
       -I$(SHAREDINCPATH) -I$(SHAREDINCPATH)GL 

CC = g++ 
CFLAGS = $(COMPILERFLAGS) -g $(INCDIRS) 
LIBS = -lglut -lGL -lGLU -lm 

prog : $(MAIN) 

$(MAIN).o : $(SRCPATH)$(MAIN).cpp 
glew.o : $(SHAREDPATH)glew.c 
GLTools.o : $(SHAREDPATH)GLTools.cpp 
GLBatch.o : $(SHAREDPATH)GLBatch.cpp 
GLTriangleBatch.o : $(SHAREDPATH)GLTriangleBatch.cpp 
GLShaderManager.o : $(SHAREDPATH)GLShaderManager.cpp 
math3d.o : $(SHAREDPATH)math3d.cpp 

$(MAIN) : $(MAIN).o glew.o 
    $(CC) $(CFLAGS) -o $(SRCPATH)$(MAIN) $(LIBDIRS) $(SRCPATH)$(MAIN).cpp \ 
     $(SHAREDPATH)glew.c $(SHAREDPATH)GLTools.cpp $(SHAREDPATH)GLBatch.cpp\ 
     $(SHAREDPATH)GLTriangleBatch.cpp $(SHAREDPATH)GLShaderManager.cpp \ 
     $(SHAREDPATH)math3d.cpp $(LIBS) 

clean: 
    rm -f *.o 

我的問題是出現以下錯誤:

[email protected] ~/Development/Triangle $ make 
g++ -c -o triangle.o triangle.cpp 
triangle.cpp:4:50: error: GLTools.h: No such file or directory 
triangle.cpp:5:56: error: GLShaderManager.h: No such file or directory 

但是,當我複製我的Makefile到文件夾開發(一個文件夾上一級),並編輯我編寫的路徑,沒有任何錯誤。

爲什麼我的triangle.cpp和Makefile在一個文件夾中時出現錯誤,我嘗試訪問父文件夾中的GLTools?

回答

4

default rule for compiling c++使用CXXFLAGS而不是CFLAGS,並且您尚未設置它,因此它不包括INCDIRS

添加

CXXFLAGS = $(COMPILERFLAGS) -g $(INCDIRS) 

,然後再試一次。

你自己發現這種方式是通過讀取make的輸出。請注意您展示的輸出中的第一行:

g++ -c -o triangle.o triangle.cpp 

不包含標誌。沒有-g。沒有你花費所有麻煩去設置的東西。

+0

THX很多:d它有助於 – demonking

+0

這究竟是爲什麼? OP實際上特別把CFLAG放在應該正確擴展的命令中(像任何變量) – texasbruce

1

嘗試集標誌爲G ++

CXXFLAGS = $(CFLAGS) 
+0

只是爲了確切 - 這個賦值將'CFLAGS'字符串設置爲CXXFLAGS變量,CXXFLAGS = $(CFLAGS)可能就是你想要的。 – Michy

+0

確實。糾正。謝謝Michy。 –