命名:makefile Makefile
如果命名为其他名字比如mf,执行命令为make -f mf
1个规则:
ALL:a.out
目标:依赖条件
(一个tab缩进)命令
2个函数
$(wildcard ./*.c):匹配当前工作目录下的所有.c文件。将文件名组成列表,赋值给变量src
(
p
a
t
s
u
b
s
t
(patsubst %.c,%.o,
(patsubst(src)):将参数3中,包含参数1的部分,替换为参数2
3个自动变量
$@:在规则的命令中,表示规则中的目标
$^:在规则的命令中,表示所有依赖条件
$<:在规则的命令中,表示第一个依赖条件.如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则
1.Makfile同级目录下创建src,inc,bin,obj目录,如果有动态库要链接创建lib目录
2.将.c文件放入到src目录,.h文件放入到inc目录
SRC = ./src
INC = ./inc
BIN = ./bin
OBJ = ./obj
#匹配当前工作目录下的所有.c文件。将文件名组成列表,赋值给变量src
src = $(wildcard $(SRC)/*.c) # ./src/hello.c
#将参数3中,包含参数1的部分,替换为参数2
obj = $(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(src)) # /obj/hello.o
#打印变量
$(info $(src))
$(info $(obj))
inc_path = ./inc
ARGS = -Wall -g
ALL:a.out
a.out:$(obj)
gcc $^ -o $@ $(ARGS )
$(OBJ)/%.o:$(SRC)/%.c
gcc -c $< -o $@ $(ARGS) -I $(inc_path)
clean:
-rm -rf $(obj) a.out
#“-”:作用是,删除不存在文件时,不报错。顺序执行