makefile 三个要素
简单的命令终端上输出:test可以是目标也可以是依赖,所以all依赖test
1.编译简单两个c文件:
2.1.变量(语言的变量,都懂)
2.2.自动变量 :以上变量不好的地方就是,如果我们改了文件名字就需要进去改makefile
先介绍语法:
2.3 常用的两个函数 wildcard(通配符) patsubst(替换)
.PHONY:clean
CC = gcc
RM = rm
EXE = simple
SRCS = $(wildcard *.c) #匹配所有的c文件名
OBJS = $(patsubst %.c,%.o,$(SRCS)) #把所有匹配到的c文件替换成.o文件名
$(EXE) : $(OBJS)
$(CC) -o $@ $^
%.o: %.c
$(CC) -o $@ -c $^
clean:
$(RM) $(EXE) $(OBJS)
2.3.2 addperfix 函数 :用来给字符串中的每个子串前加上一个前缀,形式是:$(addprefix prefix, names)
.PHONY:all
without_dir = foo.c foo2.c main.o
with_dir := $(addprefix objs/, $(without_dir))
all:
@echo $(with_dir)
#这样就可以访问就能拼接到别的文件夹去拿别的文件过来编译了
2.3.3 filter 从一个字符串中,留下满足的字符串,其形式是: $(filter pattern..., text)。同伴filter-out把匹配的给去除掉 多个是以空格隔开的
.PHONY:all
without_dir = $(wildcard *)
with_dir := $(filter %.c %.s, $(without_dir))
all:
@echo $(with_dir)