【Linux基础七】Linux开发工具—下(make和makefile)
1.make和makefile的意义
当我们编译代码时,会输入
gcc test.c -o test.exe
当我们删除可执行程序时,会输入
rm -rf test.exe
每次都要输入非常不方便,因此我们要使用make和makefile自动化构建代码,提高Linux下的编程效率
2.make和makefile的使用
make是指令
makefile是文件,而且需要我们自己创建,文件内部具有特定格式
创建makefile文件,vim开始编辑,如下是比较标准且基础的格式(test.c编译为mybin 和 清理mybin两个过程)
- 第二行必须以tab键开头(与几个空格无关)
底行模式下wq退出后,makefile已经创建结束,准备一个任意代码的test.c文件放在同一目录下
使用指令:
make
成功得到mybin程序后,清理掉mybin,使用指令:
make clean
3.make和makefile深入理解
3.1 make指令
我们使用上述的
make
时,其实相当于make mybin
因为首次使用make
时,会从上到下扫描makefile文件,如果发现了第一个目标文件就会自动执行
所以makefile的第一条指令可以自动执行,后面的指令就需要make
+特定指令
将编译指令和清理指令交换位置
执行make,再执行make mybin,可以看到结果
3.2 伪目标
.PHONY
将clean指令修饰成了伪目标
是否是伪目标有什么区别呢?
当我们正常使用make会运行文件内的第一条指令,但连续make的行为被阻止
但被装修成伪目标的clean就可以每次都执行
我们发现make会对指令有限制,并不能随意编译代码,为很么会被限制?这就要引出文件的三个属性了
4.文件的三个属性
查看文件属性
stat 文件名
- 修改文件内容可能会影响文件大小,进而影响文件属性
- 修改文件权限等操作影响文件属性,不会影响文件内容
- Access是最频繁更新的时间,所以它的时间数据不会实时更新
当源文件test.c的修改时间晚于可执行程序mybin的修改时间,系统才会同意
make
所以伪目标就能强制执行指令
5.makefile的推导能力
这就是推导能力
6.makefile定义变量
按照如下写法,运行起来与普通的makefile没有区别
第一种:
target=mybin
src=test.c
cc=gcc
$(target):$(src)
$(cc) $(src) -o $(target)
.PHONY:clean
clean:
rm -rf $(target)
$(定义的变量名)
即可使用自定义的名字
第二种:
依赖关系左边可用
$^
代替
依赖关系右边可用$@
代替
mybin:test.c
gcc $@ -o $^
.PHONY:clean
clean:
rm -rf mybin
补充:
如果不想
make
或make clean
时将指令打印在显示器上,可以在makefile里,在指令前加上@
mybin:test.c
@gcc $@ -o $^
.PHONY:clean
clean:
@rm -rf mybin