makefile文件解释
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
makefile文件解释
makefile文件
CC = g++
PROGRAM = ubuntuopengl
SRC = $(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++
CCmakefile隐含变量默认选择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
代表所链接的库文件