linux - 具有相对路径的 Makefile?

标签 linux makefile

我在 Gentoo Linux 上的 Makefile 有问题。

这是我的文件夹层次结构:

Development
 -> GLTools  
   -> include    
   -> src

->Triangle    
  ->triangle.cpp    
  ->Makefile

和我的 Makefile:

MAIN = triangle
SRCPATH = ./
SHAREDPATH = ../GLTools/src/
SHAREDINCPATH = ../GLTools/include/
LIBDIRS = -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 = -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 $(SRCPATH)$(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

我的问题是出现以下错误:

demonking@Master ~/Development/Triangle $ make
g++    -c -o triangle.o triangle.cpp
triangle.cpp:4:50: error: GLTools.h: No such file or directory
triangle.cpp:5:56: error: GLShaderManager.h: No such file or directory

但是当我将我的 Makefile 复制到文件夹 Development(上一级文件夹)并编辑我的路径时,它编译时没有任何错误。

当我的 triangle.cpp 和 Makefile 位于一个文件夹中并且我尝试访问父文件夹中的 GLTools 时,为什么会出现错误?

最佳答案

default rule for compiling c++使用 CXXFLAGS 而不是 CFLAGS,并且您尚未设置它,因此它不包含 INCDIRS

添加

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

再试一次。

您自己发现这一点的方法是阅读 make 的输出。请注意您展示的输出中的第一行:

g++    -c -o triangle.o triangle.cpp

没有包含标志。没有 -g。没有你费尽心思设置的东西。

关于linux - 具有相对路径的 Makefile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6890431/

相关文章:

linux - 如何在 awk 操作中增加 shell 变量

makefile - GNU Makefile 中的仅限订单先决条件在 CMake 中可用吗?如果没有,有哪些替代选项?

docker - Cloud9 C 代码运行失败

c - 为什么要从 .o 创建一个 .a 文件用于静态链接?

linux - 尝试在 Ubuntu Linux debian 中打包 Unity 游戏

linux - Linux 设备驱动程序中的寄存器级访问

C-Linux : list sparse files and print 0-filled disk blocks

linux - Shell 脚本,在执行一段时间后杀死进程

c - 如何向每个文件添加变量?

c makefile rcv ranlib