c++ - 不在包含路径中搜索

标签 c++ makefile

我正在学习 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/

相关文章:

c++ - 链接未在 Makefile 中完成

具有不同目录的 C makefile

c++ - Makefile 中的这一行是什么意思?

c++ - MSVC 上的 NULL 行为

c++ - GLSL 照明作为平面 - 法线问题?

c++ - Makefile,如何同时链接32位库和64位库

ubuntu - ',' 标记之前的预期表达式

c++ - 防止Poco Server Application中的目录遍历攻击

c++ - std::aligned_storage 如何为任何对象公开正确对齐的存储?

c++ - 如何从 WCHAR 数组中获取子字符串