2015-06-17 68 views
1

我正在通过OpenGL教程(OpenGL SuperBible 5)工作,我试图让我提供的Makefile为我自己的程序工作。我试图让make访问我的/home/ben/lib/GLTools/include/目录中的头文件GLTools.h,并将其包含在我的Makefile中,其中-I/home/ben/lib/GLTools/include/(实际上我使用的是-I$(SHAREDINCPATH)),但make抱怨说没有这样的文件。这是我Makefile(我已经明确提到,我已经编辑原Makefile):不在包含路径搜索

MAIN = Triangle 
SRCPATH = ./  # Edited: src is in CWD 
SHAREDPATH = /home/ben/lib/GLTools/src/ # Edited to copied GLTools/src dir 
SHAREDINCPATH = /home/ben/lib/GLTools/include/ # Edited to copied dir 
LIBDIRS = -L/usr/X11R6/lib -L/usr/X11R6/lib64 -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 = -lX11 -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 $(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 

...这里是make投诉:

[email protected]:~/Code/C++/OpenGL/SuperBible5/SB5/Listings$ make 
g++ -c -o Triangle.o Triangle.cpp 
Triangle.cpp:4:50: fatal error: GLTools.h: No such file or directory 
compilation terminated. 
make: *** [Triangle.o] Error 1 

其合理性检查我打印出的GLTools.h位置:

[email protected]:~/Code/C++/OpenGL/SuperBible5/SB5/Listings$ ls /home/ben/lib/GLTools/include/ 
GL    GLFrame.h    GLMatrixStack.h GLTriangleBatch.h 
GLBatchBase.h GLFrustum.h   GLShaderManager.h math3d.h 
GLBatch.h  GLGeometryTransform.h GLTools.h   StopWatch.h 

任何想法,为什么我不能编译?我正指着GLTools.hINCDIRS,对吧?

此外,我无法在makefile中的任何位置找到COMPILERFLAGS的声明 - 这是系统定义的吗?

回答

1

为G ++,你需要在你的makefile定义

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

而且,由于同时使用C文件和C++文件,然后定义无论是在你的Makefile:

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

CFLAGS由化妆时使用它编译C文件,编译C++文件时使用CXXFLAGS。见http://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

CFLAGS 

    Extra flags to give to the C compiler. 
CXXFLAGS 

    Extra flags to give to the C++ compiler. 
+0

太棒了!我想知道为什么这对原始Makefile有效 - 我复制并粘贴源代码,因此所有内容都应该完全相同。 –