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