Makefile定义了一系列规则,通过make执行——>自动化编译,类似shell脚本。
一个 Makefile 文件中可以有一个或者多个规则
目标 ...: 依赖 ...
命令(Shell 命令)
...
//目标:最终要生成的文件(伪目标除外)
//依赖:生成目标所需要的文件或是目标
//命令:通过执行命令对依赖操作生成目标(命令前必须 Tab 缩进)
自定义变量
变量名=变量值 var=hello
预定义变量
AR : 归档维护程序的名称,默认值为 ar
CC : C 编译器的名称,默认值为 cc
CXX : C++ 编译器的名称,默认值为 g++
$@ : 目标的完整名称
$< : 第一个依赖文件的名称
$^ : 所有的依赖文件
获取变量的值
$(变量名)
app:main.c a.c b.c
gcc -c main.c a.c b.c
#自动变量只能在规则的命令中使用
app:main.c a.c b.c
$(CC) -c $^ -o $@
$(var)
模式匹配
add.o:add.c
gcc -c add.c
div.o:div.c
%.o:%.c
gcc -c div.c
- %: 通配符,匹配一个字符串
sub.o:sub.c
- 两个%匹配的是同一个字符串
gcc -c sub.c
%.o:%.c
mult.o:mult.c
gcc -c $< -o $@
gcc -c mult.c
main.o:main.c
gcc -c main.c
函数
$(wildcard PATTERN...)
功能:获取指定目录下指定类型的文件列表
参数:PATTERN 指的是某个或多个目录下的对应的某种类型的文件,如果有多
个目录,一般使用空格间隔
返回:得到的若干个文件的文件列表,文件名之间使用空格间隔
示例:
$(wildcard *.c ./sub/*.c)
返回值格式: a.c b.c c.c d.c e.c f.c
06 / 函数
$(patsubst <pattern>,<replacement>,<text>)
功能:查找<text>中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合
模式<pattern>,如果匹配的话,则以<replacement>替换。
<pattern>可以包括通配符`%`,表示任意长度的字串。如果<replacement>
中也包含`%`,那么,<replacement>中的这个`%`将是<pattern>中的那个%
所代表的字串。(可以用`\`来转义,以`\%`来表示真实含义的`%`字符) 返回:函数返回被替换过后的字符串
示例:
$(patsubst %.c, %.o, x.c bar.c)
返回值格式: x.o bar.o