不要在包含路径中搜索

时间:2015-06-17 19:17:03

标签: c++ makefile

我正在通过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的声明 - 这是系统定义的吗?

1 个答案:

答案 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.