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

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

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目标文件中含有.PHONY,clean即可称为伪目标 而mytest目标文件中不含有若将mytest目标文件加上.PHONY

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

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

正常情况下,在连续输入 make,会显示如上警告

分析

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

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

stat 指令查询

stat + 源代码/可执行程序

modify代表对内容的修改时间

有搞不懂的点击查看touch指令的修改文件的时间信息

使用stat命令 ,发现可执行程序最近修改时间比源代码要晚

解决方法

touch 源文件,若源文件存在,则将时间更到最新

此时再次可以使用 make,运行gcc命令

相关文章
|
4天前
|
自然语言处理 数据库 iOS开发
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
40 12
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
|
1月前
|
监控 安全 Ubuntu
Linux下如何安装配置Fail2ban防护工具
通过以上步骤,可以在Linux系统中成功安装和配置Fail2ban,从而有效保护服务器免受暴力破解等攻击。Fail2ban通过实时监控日志文件,自动更新防火墙规则,为系统安全提供了一层重要的保护。
157 36
|
2月前
|
Rust Ubuntu Java
[Linux工具] Makefile
Makefile是Linux环境下用于自动化编译和链接程序的配置文件,常用于简化大型项目的编译流程。通过定义目标文件、依赖文件及生成命令,Makefile能高效管理编译任务。它不仅适用于C语言项目,还可扩展到其他编程语言和非编程任务中。
64 20
[Linux工具] Makefile
|
1月前
|
Linux API
Linux下载工具wget与curl
`wget` 是一个用于从网络下载文件的命令行工具,支持HTTP、HTTPS和FTP协议。它能自动处理下载中断,并支持递归下载网站内容。基本用法:`wget URL`,可指定文件名(`-O`)、保存目录(`-P`),还支持断点续传(`-c`)、限速(`--limit-rate`)和递归下载(`-r`)。相比之下,`curl` 更侧重于发送各种HTTP请求(如GET、POST),并支持文件上传、自定义请求头和cookie等功能。
61 10
|
27天前
|
存储 Ubuntu 前端开发
Linux软件包管理工具概览
在Linux系统中,dpkg、apt、rpm、yum和dnf是几种常见的包管理工具,它们分别属于不同的Linux发行版或家族,并有着各自的诞生顺序和特点。下面将按照这些工具的诞生顺序,并结合Debian、Red Hat、CentOS、Ubuntu和Kali等系统,进行详细的介绍。
39 4
|
2月前
|
Linux 网络性能优化 网络安全
Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)
通过以上步骤,您可以在Linux(OpenWrt)系统中使用iptables和tc工具实现网络流量限速控制(QoS)。这种方法灵活且功能强大,可以帮助管理员有效管理网络带宽,确保关键业务的网络性能。希望本文能够为您提供有价值的参考。
181 28
|
2月前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
68 11
|
8天前
|
Linux
Linux 常用文件查看命令
`cat` 命令用于连接文件并打印到标准输出,适用于快速查看和合并文本文件内容。常用示例包括:`cat file1.txt` 查看单个文件,`cat file1.txt file2.txt` 合并多个文件,`cat > filename` 创建新文件,`cat >> filename` 追加内容。`more` 和 `less` 命令用于分页查看文件,`tail` 命令则用于查看文件末尾内容,支持实时追踪日志更新,如 `tail -f file.log`。
29 5
Linux 常用文件查看命令
|
1月前
|
Linux
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
79 24
Linux系统之whereis命令的基本使用
|
14天前
|
Linux
Linux od命令
本文详细介绍了Linux中的 `od`命令,包括其基本语法、常用选项和示例。通过这些内容,你可以灵活地使用 `od`命令查看文件内容,提高分析和调试效率。确保理解每一个选项和示例的实现细节,应用到实际工作中时能有效地处理各种文件查看需求。
45 19