[Linux 基础] make、Makefile自动化构建代码工具

这篇具有很好参考价值的文章主要介绍了[Linux 基础] make、Makefile自动化构建代码工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维

1、make与Makefile是什么

make是一个命令,Makefile是一个在当前目录下存在的一个具有特定格式的文本文件。

2、为什么要有make与Makefile

在VS编译器中,我们在编译执行代码的时候ctrl+f5就可以了,而在linux中我们需要使用gcc/g++ 配合选项并需要正确的格式才可以完成编译,这样是比较麻烦的,我们make与Makefile可以实现自动化构建代码的,当写好代码,只需要一个make指令就能完成整个文件的自动编译。
并且我们写gcc的时候可能会有错误,但是我们直接写到文件中,一次写正确,后面直接使用即可;
我们能够编译,也要能够清理,也是这个道理,我们一次写正确,后面直接使用即可。

3、怎么实现一个Makefile文件

首先我们先创建一个makefile文件,这里makefile单词一定要输入正确,不能出现错误,首字母m可大写可小写,我这里是大写。

touch Makefile/makefile //首字母m大写/小写都可以 

[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维

3.1 如何编写Makefile文件

Makefile是当前目录下的一个普通文本文件,内容包含依赖关系和依赖方法
首先先进入Makefile文件中,然后输入以下内容

test:test.c
    gcc -o test test.c     

注意:我们在输入gcc 指令这一行的时候,必须要tab键。
[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维

3.1.1 依赖关系

在上面的Makefile中,test 依赖于 test.c

3.1.2 依赖方法

上面的Makefile中,gcc -o test test.c 就是依赖方法

3.2 如何清理项目

3.2.1 如何编写

首先进入Makefile,输入以下内容

.PHONY:clean
clean:
	rm -f test

[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维

3.2.2 clean详解

  • 工程是需要被清理的
  • 像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编译。
  • 但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的(依赖方法总是会被执行,不会被任何情况拦截)。

3.3 make的使用

当我们已经写好了Makefile文件后,我们直接输入make就可以自动编译代码了。
[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维
当我们想要清理可执行文件,我们输入make clean即可。
[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维
如果我们在Makefile中先写的是清理,输入make执行的就是清理工作,所以谁在前make就执行谁。
[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维
[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维
一般我们将清理工作写在构建的后面。

3.4 原理

1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“test”这个文件,并把这个文件作为最终的目标文件。
3. 如果test文件不存在,或是test所依赖的后面的test.c文件的文件修改时间要比test这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成test这个文件。
4. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
5. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。
6. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。

第三点可能会有疑惑,这里的意思其实是,当我们已经生成了可执行文件后,我们对test.c源文件进行修改,这时test.c的内容发生改变,我们再执行make,这时会生成新的可执行程序,如果没有更新内容,那么我们就没有必要再执行依赖方法。这是根据两个文件的时间进行对比,当源文件的时间大于可执行文件的时间就更新,本质还是看源文件的内容是否发生改变的,因此这里对比的就是Modify时间。

[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维
此时就是没有更新源文件,我们再去生成的时候就会报错说test是最新的。

3.4.1 查看文件修改时间

使用stat命令可以查看文件的修改时间。

stat 文件名

[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维
这里有三个时间,Access、Modify、Change也叫做ACM时间。

Access:读取或进入文件的时间
Modify:最后一次文件内容改变时间
Change:最后一次文件属性改变时间

当我们对源文件内容进行修改之后,Modify时间会随之改变,这时Change时间也可能会改变,因为文件内容的改变会引发属性发生改变(比如文件的大小),所以change时间可能就会随之改变。
make就是根据源文件的修改时间与可执行文件的时间做对比,来选择是否要重新执行依赖方法。
[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维
这里我们可以看到源文件修改时间大于可执行文件修改时间,此时执行make,就会重新执行依赖方法,生成新的可执行文件。
[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维
[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维
这时可执行文件的Modify时间大于源文件MOdify时间,再执行make就无效了,我们可以看看:
[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维
我们还可以只修改指定的时间:

touch -选项 文件名

[Linux 基础] make、Makefile自动化构建代码工具,Linux,linux,运维
但是如果这里我们选择修改Access / Modify时间,Change时间也会跟着改变,因为时间也是属性,属性改变Change时间就会发生改变。
一般情况下,我们读取文件的频率很高,文件是存在磁盘中,每次更改时间的本质都是在访问磁盘,效率低下,如果每次访问文件都去更新Access时间的话,Linux系统回充满大量的访问磁盘的IO操作,变相的减慢系统效率,因此更改Access时间,添加了次数限制。文章来源地址https://www.toymoban.com/news/detail-714116.html

到了这里,关于[Linux 基础] make、Makefile自动化构建代码工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】自动化构建工具-make/Makefile详解

     前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门!  订阅专栏阅读:YY的《Linux》系列 ❀❀❀❀❀ 【Linux系列-P1】 Linux环境的搭建 【Linux系列-P2】Linux的基本知

    2024年02月16日
    浏览(28)
  • 【Linux】项目自动化构建工具 —— make/Makefile

    前言: 在上一期的博文中,我们对 Linux 下的编译器 - gcc/g++的使用进行了详细的讲解,今天我将给大家讲解的是关于  【Linux】项目自动化构建工具 —— make/Makefile  的详细使用教程!! 本文目录 (一)前情摘要 (二)背景介绍 1、Makefile 的基本认识 2、make 的基本认识 3、

    2023年04月19日
    浏览(47)
  • 【Linux】自动化构建工具make和Makefile

           🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️小林爱敲代码       🛰️社区 : 进步学堂       🛰️专栏 : Linux之路       🛰️欢迎关注:👍点赞🙌收藏✍️留言 在一个工程中的源文件不计数,其按类型、功能、模

    2023年04月18日
    浏览(29)
  • 【Linux】项目自动化构建工具 - make/Makefile

    会不会写makefile,从侧面说明了一个人是否具备完成大型工程的能力。 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的

    2024年02月04日
    浏览(38)
  • 【Linux】项目自动化构建工具-make/Makefile

    会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂

    2023年04月09日
    浏览(35)
  • Linux---(六)自动化构建工具 make/Makefile

    make是一个命令。 Makefile是一个在当前目录下存在的一个具有特定格式的文本文件。 🎗️会不会写Makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 🎗️一个工程中的源文件数不胜数,其按照类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则

    2024年02月05日
    浏览(34)
  • Linux--自动化的构建项目:make、Makefile

    make是一个命令 Makefile是一个文件 Makefile的构成: ①依赖关系 ②依赖方法 编写Malefile文件的最终目标是生成项目,换句话说就是,想让Makefile把我的源代码编译,自动形成可执行文件 示例: 注:.PHONY这个的作用是,修饰对象总是被执行(例如:即使已删除,但依旧可以

    2024年02月12日
    浏览(26)
  • Linux:项目自动化构建工具——make/Makefile

    前言: 本章主要内容有认识与学习 Linux 环境下如何使用项目自动化构建工具—— make/makefile 。 当我们编写一个较大的软件项目时,通常需要将多个源文件编译成可执行程序或库文件。为了简化这个过程,我们可以使用 make 工具和 Makefile 文件。 Makefile 文件可以帮助我们 自动

    2024年02月13日
    浏览(32)
  • 【Linux】Linux项目自动化构建工具-make/makefile

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门到精通 🎉代码仓库:小智的代码仓库 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需

    2024年02月12日
    浏览(50)
  • 构建无忧:探索 Linux 项目自动化构建神器-make/Makefile

    编写Makefile是Linux开发中一项重要的技能,熟练的运用这个工具能提高编译效率,帮助你完成大型工程。Makefile带来的最大好处就是——自动化编译,一旦将 Makefile文件 写好,只需要一个 make命令 ,即可完成预期的编译,大大提高了软件开发的效率。 1.基本使用 下面我来简单

    2024年02月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包