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

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

背景

  • 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
  • 再一个,我们平时使用的集成开发环境,创建一个工程项目,其中的源文件不计其数,哪个需要先编译,哪个需要后编译,哪个需要重新编译,都不需要我们操心,编译器都替我们做了,而makefile里这一系列操作都需要我们自己决定。
  • 但是,makefile有一个好处就是一但写好,只需要make命令整个工程自动编译,极大提高了编程效率。
  • make是一个命令工具,makefile是一个文件,make用来解释makefile,两者搭配使用,完成项目自动化构建。

依赖关系

比如我们有一个.c的文件,我们想要生成他的可执行程序,是不是要依赖这个文件?

依赖方法

我们知道了要生成这么一个可执行程序,需要依赖这个,c文件,那么如何通过这个文件生成可执行程序?这就需要依赖方法。

实例代码

原理

  1. make 会现在当前目录下寻找叫做makefile或者Makefile的文件,名字只能是这两者之一。
  2. 如果找到,那么他就会去找a.out这个文件,并将其作为最终的目标文件。
  3. 如果没有目标文件,就会根据依赖文件和依赖方法来生成这个文件。
  4. 在寻找过程中,如果找不到依赖文件,那么make报错终止并且就会直接退出,对于定义命令的错误,或是编译失败,或者直接就不理。

项目清理

先看举例代码:

我们会发现,编译一次后,再不允许编译,再看例子:

这一次,我们在对源文件修改后就可以编译了。

再编译,又不允许,我们就很好奇,系统是根据什么来判断是否让我们编译?

答案是时间,acm,访问文件时间,修改文件内容时间,修改文件属性时间,而且是通过比对源文件和可执行程序Modify时间

只要可执行程序的Modify时间比源文件的时间新,那么就说明我们对源文件查看或者修改过,而且未编译,此时就可以编译了。

其余两个时间是不行的。

但是我们还是有不修改源文件而只更新文件时间的命令。

touch命令,更新文件时间戳。

那么,在我们修改源文件后,有时候,因为源文件过多的原因,文件的修改时间可能没有修改,如果出现了无法编译的情况,那么我们就需要清理解决方案,也就是清理项目。

实际上,我们在进行编译的时候,没有生成目标文件,直接生成了可执行文件,在集成开发环境中,是会有各种临时文件生成的,当然,我们也可以用gcc 生成各种临时文件,但是博主懒。

补充:

另外要提到的一点是伪文件,就是加了.PHONY: , 加上他以后,意思就是总是被执行,也就是说,我不管你时间是否修改,只要你命令,我就执行。

而且值得注意的是,make指令只会执行makefile中从上到下第一组依赖关系和依赖方法。如果我们的文件依赖列表中的文件找不到,就会向下去找,找到以后执行生成,再返回去执行。

$@就是目标,$^就是我们的依赖文件列表

目录
相关文章
|
9月前
|
安全 Linux Shell
四、Linux核心工具:Vim, 文件链接与SSH
要想在Linux世界里游刃有余,光会“走路”还不够,还得配上几样“高级装备”。首先是Vim编辑器,它像一把瑞士军刀,让你能在命令行里高效地修改文件。然后要懂“软硬链接”,软链接像个快捷方式,硬链接则是给文件起了个别名。最后,SSH是你的“传送门”,不仅能让你安全地远程登录服务器,还能用scp轻松传输文件,设置好密钥更能实现免-密登录,极大提升效率。
591 5
|
Linux 开发工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
|
8月前
|
安全 Linux iOS开发
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
595 6
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
|
9月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
776 16
|
9月前
|
安全 Linux iOS开发
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
377 0
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
|
11月前
|
缓存 监控 Linux
Linux系统性能调优技巧和相关工具
Linux 作为一种应用应展和系统服务的优选操作系统,在处理性能和端到端点评估上持有出色表现。但是,在处理进程或系统处于低效状态时,性能调优就显得十分重要。本文将探讨一些 Linux 系统性能调优的常用技巧,并介绍相关工具
307 1
Linux系统性能调优技巧和相关工具
|
11月前
|
Linux 数据安全/隐私保护 iOS开发
推荐Linux环境下效能优良的双向文件同步工具
综合上述条件,对于Linux环境下的双向文件同步需求,Unison 和 Syncthing 是两个非常出色的选择。它们都有良好的社区支持和文档资源,适用于不同规模的环境,从个人使用到商业部署。Unison 特别适合那些需要手动干预同步过程、需要处理文件冲突解决的场景。而 Syncthing 更加现代化,适合需要自动、实时的数据同步与备份的环境。对于选择哪一个,这将取决于个人的使用场景和具体需求。
1255 16
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
600 41
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
559 32