双文件简单编译

all: f

# 链接
f: f1.o f2.o
	gcc f1.o f2.o -o f
# 对于f1.o gcc会自动编译
# 而由于f2.o 我们需要指定头文件路径,故手动声明
f2.o:
	gcc -c f2.c -I./tt 
clean:
	rm -f f f1.o f2.o

复杂编译

.PHONY修饰的目标就是只有规则没有依赖,每次都执行。

符号

@表示静默执行,不显示这条命令

$@表示目标项,$^表示所有依赖文件。

app: main.o utils.o
	@gcc -o $@ $^

等价于gcc -o app main.o utils.o,且静默执行。

内置函数

patsubst

$(patsubst %.c,%.o, a.c b.c)

把字串“a.c b.c”符合模式[%.c]的单词替换成[%.o],返回结果是“a.o b.o”

OBJECTS=$(patsubst %.c,%.o,$(SOURCES))生成源文件对应的目标文件名字。

addprefix

$(addprefix src/,foo bar)

返回值为src/foo src/bar

上次更新:
Contributors: YangZhang