Linux项目自动化构建工具-make/makefile

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录


make是一个命令
makefile是一个文件

1. 使用make自动生成gcc命令

使用 touch makefile 创建一个makefile文件
使用 vim makefile进入 vim编辑器

                                                                                                                          ⮂⮂ buffers 
  1 mytest:test.c
  2   gcc -o mytest test.c

  • 在使用gcc指令之前必须加上tab键
[yzq@VM-8-8-centos my]$ make
gcc -o mytest test.c

  • 退出vim使用make后会自动在当前目录下查找对应的makefile文件再去执行内置好的gcc命令

2.依赖关系和依赖方法

mytest:test.c
mytest作为目标文件test.c作为依赖文件列表

使用test.c形成mytest两者称之为依赖关系

gcc -o mytest test.c 称之为依赖方法
说明makefile是一个围绕依赖关系和依赖方法构建的一个自动化编译工具

关系和方法的解读

  • 比如说到月底你没钱了你给你爸打电话要钱过去后你说 爸我是你儿子这句话表明了你和你爸的关系即依赖关系但若你只说了这一句话你爸怎么知道你要干什么 说明只有依赖关系是不可以的。
  • 若又加了句到月底了你得给我打钱这就表明了依赖方法这样你爸才能把钱转给你 说明同时存在正确的依赖关系和正确的依赖方法才可以实现

3. 使用make clean 删除操作

再次输入以下内容完成删除操作

mytest:test.c
  2   gcc -o mytest test.c
  3 .PHONY:clean
  4 clean:                                                                                                                                              
  5     rm -f mytest

  • 同样在 rm -f 之前也需要加上 tab
[yzq@VM-8-8-centos my]$ make clean
rm -f mytest

  • 输入make clean 会自动生成 删除命令

clean : 解读

clean:
目标文件对应的依赖文件可以是空属于是特殊情况

冒号左边为 目标文件冒号右边为 依赖文件列表
clean:
clean作为目标文件依赖文件列表为空

4 .make 和make clean 解读

在这里插入图片描述

mytest是从上到下扫描遇到的第一个真正的目标文件
makefile从上到下扫描时会默认执行第一组依赖关系和依赖方法

[yzq@VM-8-8-centos my]$ make
gcc -o mytest test.c
[yzq@VM-8-8-centos my]$ make clean
rm -f mytest
[yzq@VM-8-8-centos my]$ make mytest
gcc -o mytest test.c

  • 发现使用 makemake mytest 执行的方法是相同的
    在这里插入图片描述
  • 若将clean目标文件改变第一个目标文件 即把clean放在最前面 则使用 make时从原来的gcc命令改为 rm删除命令

5. 连续使用 make clean解读

在这里插入图片描述
连续使用make 会报警告而连续使用 make clean不会

在这里插入图片描述

  • .PHONY : 代表总是被执行的被修饰的称之为伪目标
    clean目标文件中含有.PHONYclean即可称为伪目标 而mytest目标文件中不含有

若将mytest目标文件加上.PHONY

在这里插入图片描述

  • 则可以连续输入make同时不会有警告存在

6. 如何直到程序是最新的呢

在这里插入图片描述
正常情况下在连续输入 make,会显示如上警告

分析

正常情况下先有源代码才编译的可执行程序

在这里插入图片描述

  • 如果可执行程序最近修改时间比源代码更晚一些说明可执行程序是最新的
    在这里插入图片描述
  • 若要修改源代码此时可执行程序一定存在了所以源代码的最近修改时间要比可执行程序要晚

stat 指令查询

stat + 源代码/可执行程序
在这里插入图片描述

modify代表对内容的修改时间
有搞不懂的点击查看touch指令的修改文件的时间信息
使用stat命令 发现可执行程序最近修改时间比源代码要晚

解决方法

touch 源文件若源文件存在则将时间更到最新
在这里插入图片描述
此时再次可以使用 make运行gcc命令

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux