我正在学习 OpenGL 教程 (OpenGL SuperBible 5),并试图让提供的 Makefile 为我自己的程序工作。我正在尝试让 make
访问我的 /home/ben/lib/GLTools/include/
目录中的头文件 GLTools.h
我用 -I/home/ben/lib/GLTools/include/
将它包含在我的 Makefile 中(实际上我正在使用 -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
知道为什么我无法编译吗?我用 INCDIRS
指向 GLTools.h
,对吧?
另外,我在 makefile 的任何地方都找不到 COMPILERFLAGS
的声明 -- 这是系统定义的吗?
最佳答案
对于 g++ 你需要在你的 makefile 中定义
CXXFLAGS = $(COMPILERFLAGS) -g $(INCDIRS)
并且由于您同时使用 C 文件和 C++ 文件,因此请在您的 makefile 中定义它们:
CFLAGS = $(COMPILERFLAGS) -g $(INCDIRS)
CXXFLAGS = $(COMPILERFLAGS) -g $(INCDIRS)
CFLAGS是make编译C文件时使用的,CXXFLAGS是make编译C++文件时使用的。参见 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.
关于c++ - 不在包含路径中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30900460/