makefile文件解释
- makefile文件
- 详细解释
makefile文件
CC = g++PROGRAM = ubuntuopenglSRC = $(wildcard ./*.cpp)OBJECTS = $(patsubst %.cpp,%.o,$(SRC))LIBS = -lX11 -lGL -lGLEW%.o: %.cpp$(CC) $(LIBS) -c -o $@ $< $(PROGRAM): $(OBJECTS)$(CC) -o $@ $(OBJECTS) $(LIBS)clean:-rm -f $(PROGRAM)-rm -f $(OBJECTS)
详细解释
目标:
通常是要产生的文件的名称,它可以是可执行文件(OBJ文件),也可是一个执行的动作名称,如‘clean’。
依赖:
用来输入从而产生目标的文件,一个目标经常有几个依赖。
命令:
Make执行的动作,一个规则可以含有几个命令,每个命令占一行。
注意:
每个命令行前面必须是一个Tab字符,即命令行第一个字符是Tab。
指令
$(var)
$(var) 变量引用
CC = g++
CC:makefile隐含变量,默认选择gcc编译器,这边使用g++
PROGRAM = ubuntuopengl
PROGRAM = ubuntuopengl 给最后输出文件起别名
SRC = $(wildcard ./*.cpp)
SRC = $(wildcard ./*.cpp) 获取工作目录下的所有的.cpp文件列表
OBJECTS = $ (patsubst %.cpp,%.o,$(SRC))
$ (patsubst 原模式, 目标模式, 文件列表) 在$ (patsubst %.c,%.o,$ (SRC) )中,patsubst把$(SRC)中的变量符合后缀是.cpp的全部替换成.o
LIBS = -lX11 -lGL -lGLEW
LIBS = -lX11 -lGL -lGLEW 库文件
%.o: %.cpp
$(CC) $(LIBS) -c -o $@ $<
静态模式 生成链接文件
解释什么是静态模式:
objects = foo.o bar.o
all: $(objects)
$(objects): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
等同于
foo.o : foo.c
$(CC) -c $(CFLAGS) foo.c -o foo.o
bar.o : bar.c
$(CC) -c $(CFLAGS) bar.c -o bar.o
试想,如果我们的%.o
有几百个,那种我们只要用这种很简单的“静态模式规则”就可以写完一堆规则,实在是太有效率了
$(PROGRAM): $(OBJECTS)
$(CC) -o $@ $(OBJECTS) $(LIBS)
链接库文件生成可执行文件
clean:
-rm -f $(PROGRAM)
-rm -f $(OBJECTS)
清理可执行文件和生成的.o文件
此外常用的一些指令
CFLAGS
CFLAGS
:指定头文件(.h)的路径 如:CFLAGS=-I
/usr/include -I /path/include
LDFLAGS
LDFLAGS
:指定库文件的路径 如:LDFLAGS=-L
/usr/lib-L
/path/to/your/lib
LIBS
LIBS
:告诉链接器要链接哪些库文件。如LIBS = -lx11 -lGL -lGLEW,-l
代表所链接的库文件