Makefile 语法
注释
makefile
# 这是注释
result.txt: source.txt
# 这是注释
cp source.txt result.txt # 这也是注释回声(echoing)
正常情况下,make会打印每条命令,然后再执行,这就叫做回声(echoing)。
make
test:
# This is a test.执行上面的规则,会得到下面的结果。
bash
❯ make test
# This is a test.在命令的前面加上@,就可以关闭回声。
make
test:
@# 这是测试现在再执行 make test,就不会有任何输出。
由于在构建过程中,需要了解当前在执行哪条命令,所以通常只在注释和纯显示的echo命令前面加上@。
make
test:
@# 这是测试
@echo TODO通配符
通配符(wildcard)用来指定一组符合条件的文件名。Makefile 的通配符与 Bash 一致,主要有星号 *、问号 ? 和 ...。比如, *.o 表示所有后缀名为 o 的文件。
make
clean:
rm -f *.o模式匹配
Make命令允许对文件名,进行类似正则运算的匹配,主要用到的匹配符是 %。比如,假定当前目录下有 f1.c 和 f2.c 两个源码文件,需要将它们编译为对应的对象文件。
make
%.o: %.c等同于下面的写法。
make
f1.o: f1.c
f2.o: f2.c使用匹配符 %,可以将大量同类型的文件,只用一条规则就完成构建。
变量和赋值符
Makefile 允许使用等号自定义变量。
make
txt = hello world
test:
@echo $(txt)上面代码中,变量 txt 等于 Hello World。调用时,变量需要放在 \$( ) 之中。
调用Shell变量,需要在美元符号前,再加一个美元符号,这是因为Make命令会对美元符号转义。
make
test:
@echo $$HOMEmake
VARIABLE = value
# 在执行时扩展,允许递归扩展。
VARIABLE := value
# 在定义时扩展。
VARIABLE ?= value
# 只有在该变量为空时才设置值。
VARIABLE += value
# 将值追加到变量的尾端。内置变量
Make命令提供一系列内置变量,比如,(MAKE) 指向当前使用的Make工具,这主要是为了跨平台的兼容性。
make
output:
$(CC) -o output input.c