04 / 变量

修改:上一小节的makefile内容

(1)将如下的
app:sub.o add.o mult.o div.o main.o
gcc sub.o add.o div.o main.o
改成
src=sub.o add.o mult.o div.o main.o
target=app
$(target):$(src)
$(CC) $(src) -o $(target)
截图:
![]()

05 / 模式匹配
(2)将如下的
sub.o:sub.c
gcc -c sub.c -o sub.o
add.o:add.c
gcc -c add.c -o add.o
mult.o:mult.c
gcc -c mult.c -o mult.o
div.o:div.c
gcc -c div.c -o div.o
main.o:main.c
gcc -c main.c -o main.o
改成
%.o:%.c
%(CC) -c $< -o %@
截图:


(3)对比上一节的makefile和这一小节修改的makefile


(4)执行make

(5)执行./app

06 / 函数


修改

(1)将
src=sub.o add.o mult.o div.o main.o
修改成如下,其中wildcard的功能是获得指定目录下指定类型的文件列表
src=$(wildcard ./*.c)
objs=$(patsubst %.c,%.o,$(src))
![]()

(2)将src改成objs即可,对比一下


(3)执行make

(4)执行./app

优化:我们发现在执行完make之后,会生成.o文件,我们可以在makefile写clean
#定义变量
# add.c sub.c main.c mult.c div.c
src=$(wildcard ./*.c)
objs=$(patsubst %.c, %.o, $(src))
target=app
$(target):$(objs)
$(CC) $(objs) -o $(target)
%.o:%.c
$(CC) -c $< -o $@
clean:
rm $(objs) -f

(5)执行 make clean

(6)ls,发现.o文件已经被删除掉了

(7)在Makefile中,.PHONY后面的target表示的也是一个伪造的target, 而不是真实存在的文件target,注意Makefile的target默认是文件。

#定义变量
# add.c sub.c main.c mult.c div.c
src=$(wildcard ./*.c)
objs=$(patsubst %.c, %.o, $(src))
target=app
$(target):$(objs)
$(CC) $(objs) -o $(target)
%.o:%.c
$(CC) -c $< -o $@
.PHONY:clean
clean:
rm $(objs) -f



















