Linux系统编程 37 -makefile2个函数和clean
学习笔记
一个makefile 就是用一个个规则凑在一起
2个函数
wildcard
patsubst
wildcard 百搭牌,通配符
src = $(wildcard *.c)
$(wildcard *.c)表示函数调用
wildcard 表示函数名
*.c 表示函数的参数
函数调用完以后的返回值交给src
这个函数的作用可以把所有以.c文件 匹配上
把文件名提取出来,作为一个列表赋值给src
$(wildcard *.c) = $(wildcard ./*.c):匹配当前目录下的所有.c文件
将文件名组成列表,赋值给变量src。
src=add.c sub.c div1.c
patsubst 匹配和替换
obj=$(patsubst %.c,%.o,$(src)):将参数3中,包含参数1的部分,替换为参数2.
obj=add.o sub.o div1.o
修改makefile 文件
$cat makefile
src=$(wildcard ./*.c) #add.c div1.c sub.c hello.c
obj=$(patsubst %.c,%.o,$(src)) #add.o div1.o sub.o hello.o
ALL:a.out
a.out:$(obj)
gcc $(obj) -o a.out
hello.o:hello.c
gcc -c hello.c -o hello.o
add.o:add.c
gcc -c add.c -o add.o
sub.o:sub.c
gcc -c sub.c -o sub.o
div1.o:div1.c
gcc -c div1.c -o div1.o
make
$make
make: Nothing to be done for `ALL'.
$rm ./*.o
$make
gcc -c add.c -o add.o
gcc -c div1.c -o div1.o
gcc -c hello.c -o hello.o
gcc -c sub.c -o sub.o
gcc ./add.o ./div1.o ./hello.o ./sub.o -o a.out
$./a.out
10+5 = 15
10-5 = 5
10/5 = 1
添加clean
在makefile 中添加:
clean:
-rm -rf $(obj) a.out
$make clean
rm -rf ./add.o ./div1.o ./hello.o ./sub.o a.out
注意:
$make clean -n
模拟执行一遍接下来要干的事情
$ls
add.c a.out div1.c hello.c m1 makefile.old sub.o
add.o div1. div1.o hello.o makefile sub.c
$make clean -n
rm -rf ./add.o ./div1.o ./hello.o ./sub.o a.out
$ls
add.c a.out div1.c hello.c m1 makefile.old sub.o
add.o div1. div1.o hello.o makefile sub.c
1.clean规则没有依赖条件。
2.-rm:中的- 目的是删除没有的文件时候,也不会报错。
3.-rf:-r和-f合写,-r表示递归地处理文件,
即处理该目录及其所有子目录下符合条件的文件;
-f则是无提示强制删除