我正在通过OpenGL教程(OpenGL SuperBible 5),我试图让提供的Makefile适用于我自己的程序。我试图让make
访问我的GLTools.h
目录中的标题文件/home/ben/lib/GLTools/include/
,并将其包含在我的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
投诉:
ben@crunchbang:~/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
的位置:
ben@crunchbang:~/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.h
INCDIRS
,对吧?
另外,我在makefile中的任何地方都找不到COMPILERFLAGS
的声明 - 这是系统定义的吗?
答案 0 :(得分:1)
对于g ++,你需要在你的makefile中定义
CXXFLAGS = $(COMPILERFLAGS) -g $(INCDIRS)
由于您同时使用C文件和C ++文件,因此在makefile中定义它们:
CFLAGS = $(COMPILERFLAGS) -g $(INCDIRS)
CXXFLAGS = $(COMPILERFLAGS) -g $(INCDIRS)
在编译C文件时,make使用CFLAGS,在make编译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.