make/makefile的使用

这篇具有很好参考价值的文章主要介绍了make/makefile的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

make/makefile


make是一个命令,是一个解释makefile中指令的命令工具,makefile是一个文件,当前目录下的文件,两者搭配使用,完成项目自动化构建

make/makefile是Linux项目自动化构建工具,将多个源文件放在makefile中,通过make命令,通过makefile文件中的依赖关系,使得文件实现自动化编译,极大的提高了软件开发的效率。

初步认识makefile的工作流程

下面通过一段代码进行编译演示makefile的工作流程

1.认识makefile文件的内容格式要求

make/makefile的使用,Linux,linux,make,makefile

2.make命令

make/makefile的使用,Linux,linux,make,makefile

上述内容,我们通过make命令,通过makefile文件中的依赖关系实现了test可执行程序。

依赖关系和依赖方法

依赖关系为我们要实现的可执行文件是需要依赖于一些文件,通过依赖方法来实现的。只需要找到合适的依赖关系和依赖方法,我们就可以自动化编译

make/makefile的使用,Linux,linux,make,makefile

//1.依赖方法实际上就是实现依赖关系的语句,来得到可执行文件
test:test.c   //当前目录下进行查找发现拥有test.c文件
    gcc -c test test.c  //我们通过改gcc语句来得到test
//2.如果拥有多对依赖关系的时候,对于依赖关系的文件在该makefile所在目录下进行查找,如果没有,就查看makefile中是否有能得到该文件的依赖关系,然后一步一步的向下,直到查找到的依赖关系的文件是已存在的,可以从这一依赖关系,开始运行gcc语句,来得到对应文件来作为另一依赖关系的依赖文件
    
  1 test:test.o      			//test.o 文件不存在,所以向下找
  2     gcc -o test test.o
  3 test.o:test.s				//得到.o需要.s文件,所以还是没法运行对应的gcc语句(依赖方法)
  4     gcc -c test.s -o test.o
  5 test.s:test.i				//。。。
  6     gcc -S test.i -o test.s                                                       
  7 test.i:test.c				//最后找到了.c文件的依赖关系(.c是makefile所在目录下已有的文件所以是可以执行对应的gcc语句的)
  8     gcc -E test.c -o test.i
//所以从 第8行开始执行.c得到.i,现在有了.i 在由test.s:test.i关系通过gcc -S test.i -o test.s  语句来得到.s以此类推,最后得到test可执行文件

make的使用

我们创建好makefile文件之后,我们可以通过make命令来运行该文件,但是我们发现的是make只能运行一次,情况如下:

make/makefile的使用,Linux,linux,make,makefile

//1.为什么会这样呢?难道不可以运行make创建新的test覆盖原来的test可执行文件
	对于make命令来讲,这是为了提高编译效率
//2.那么是如何判断是否需要更新该test文件的呢?
    我们先认识一个事情:先有源文件,再通过一定的依赖方法,得到可执行程序,所以一般来讲源文件的最近的修改时间比可执行文件要老(旧)
    所以当我们更改源文件之后,历史上曾经还有可执行文件,那么源文件的最近修改的时间,一定是 比可执行文件要新的。
    我们比较的是可执行程序的最近修改时间和源文件的最近修改时间
        如果.exe 新于 .c源文件 那么说明源文件是老的,即不需要重新编译
        如果.exe 旧于 .c源文件 那么说明.c源文件在实现.exe之后被更改了,所以需要重新编译
      	一般 .exe!=.c

对于上述内容总结,make会根据源文件和可执行程序的新旧,来判定是否需要重新执行依赖关系进行编译!!!

查看一下文件状态命令:stat 文件名

make/makefile的使用,Linux,linux,make,makefile

文件内容之外的就是文件属性,文件=文件内容+文件属性

下面是对于三种时间的演示:

make/makefile的使用,Linux,linux,make,makefile

//对于上述的内容我们知道了
//1.Access是多次访问之后才会进行改变,是为了系统性能考虑
//2.Modify是文件内容改变之后才会改变,相应的一般大小变化之后Change也会改变,所以一般Modify==Change
//3.Change是文件属性变化才会改变(权限,大小等),一般只有Change会发生变化(Access可能变)

所以对于make判断源文件和目标文件的新旧问题,我们采用的是Change的时间(因为稳定,文件发生变化,就一定会改变时间)

对于文件新旧问题演示make
make/makefile的使用,Linux,linux,make,makefile

如果是每次都要指定指定的依赖关系:使用.PHONY : 伪目标

.PHONY:test 表示不管如何(test.c不更改也可以)都会执行该依赖关系

make/makefile的使用,Linux,linux,make,makefile

运行展示:

make/makefile的使用,Linux,linux,make,makefile

make clean的使用

make clean 使得make的操作更加简便,想要删除指定可执行程序的时候,不用去rm,直接make clean即可

操作演示:
make/makefile的使用,Linux,linux,make,makefile

make/makefile的使用,Linux,linux,make,makefile

总结

  1. make 默认实现的是makefile文件中的第一部分(模块)

  2. make + 目标 可以实现makefile中的指定目标(部分)如make clean、make test等

  3. make默认的文件是makefile/Makefile,如果使用其他文件进行操作,使用:make -f filename

  4. 对于依赖关系和依赖方法的认识,以及make不能连续执行,是因为目标文件已经是最新的,通过stat filename来查看指定文件的信息。更改源文件的信息就可以再次make进行编译

  5. stat filename(文件名),以stat+文件名的形式,我们可以查看文件的基本信息之外的三种时间

分别为:

  • Access:表示最近访问文件的时间
  • Modify:表示最近修改文件内容的时间
  • Change:表示最近修改文件属性的时间

为了linux系统的性能,Access需要多次访问该文件才能自动修改时间。

一般来讲Modify改变,文件大小改变,所以Change改变,文件属性改变,一般只有Change改变,所以我们对于是否重新编译目标文件,比较的是源文件和可执行程序的Change时间。文章来源地址https://www.toymoban.com/news/detail-599835.html

到了这里,关于make/makefile的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Linux--make & makefile

    make 工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能, 而是用类似于批处理的方式—— 通过调用 makefile 文件中用户指定的命令来进行编译和链接的 。 makefile 命令中就包含了调用 gcc(也可以是别的编译器)去编译某个源文件的命令。 makefile 在一些简

    2024年02月12日
    浏览(40)
  • 【Linux】Linux环境基础开发工具的使用 ———(yum、vim、gcc&g++、gdb、make/Makefile、进度条 、git)

    (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是 Scort 🎓 🌍博客主页:张小姐的猫~江湖背景🌍 快上车🚘,握好方向盘跟我有一起打天下嘞! 送给自己的一句鸡汤🤔: 🔥集中起来的意志可以击穿顽石🔥 🙏作者水平很有限,如果发现错误,可在评论区指正,感谢🙏 🎉🎉欢迎持续关注!🎉🎉

    2024年01月16日
    浏览(53)
  • Linux工具make与makefile

    自动化构建工具 make / Makefile 是一个备受关注的话题。在现代软件开发中,构建和部署过程越来越复杂,需要更加高效和自动化的工具来帮助开发人员管理项目。 Make / Makefile 就是这样一种工具,它可以通过定义规则和依赖关系来自动化地构建项目。本文将介绍 make / Makefile 的

    2023年04月19日
    浏览(38)
  • 【Linux】Make和Makefile快速入门

    作者简介:დ旧言~,目前大二,现在学习Java,c,c++,Python等 座右铭:松树千年终是朽,槿花一日自为荣。 目标:熟练掌握Make和Makefile的使用 毒鸡汤:人生就像一条河,左岸是无法忘却的回忆,右岸是值得把握的青春,中岸是正在燃烧的面孔。 望小伙伴们点赞👍收藏✨加

    2024年02月04日
    浏览(43)
  • Linux: make/Makefile 相关的知识

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

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

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

    2024年02月12日
    浏览(63)
  • Linux基础——Linux开发工具(make/makefile,git)

    前言:在经过前面两篇学习,大家对Linux开发工具都有一定的了解,而在此之前最重要的两个工具就是vim,gcc。 如果对这两个工具不太了解,可以先阅读这两篇文章: Linux开发工具 (vim) Linux开发工具 (gcc/g++) 首先让我们来初步了解一下本篇的目标: 1. 学习make/makefile,并能简单

    2024年04月27日
    浏览(37)
  • 【linux】2 make/Makefile和gitee

    ヾ(๑╹◡╹)ノ\\\" 人总要为过去的懒惰而付出代价 ヾ(๑╹◡╹)ノ\\\" 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定, 哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能

    2024年02月11日
    浏览(36)
  • Linux开发工具Make/Makefile篇

    我们使用gcc/g++编译代码时,每次都要输入一长串的指令,对于单个文件或者文件较少的时候,我们还能接受,可是当文件较多的时候,我们再一个一个编译,就会比较麻烦。Linux中 make 命令加上 Makefile 文件搭配使用,就可以完成项目的自动化构建。 C代码 创建makefile文件 写入

    2024年02月12日
    浏览(35)
  • Linux 自动化构建工具(make/Makefile)

            拼着一切代价,奔你的前程。——巴尔扎克. 本章继续学习Linux常用的工具,make是可以帮我们解决一些重复使用相同指令的冗杂的自动化构建工具。 话不多说安全带系好,发车啦 (建议电脑观看) 。 附:红色,部分为重点部分;蓝颜色为需要记忆的部分(不是死

    2024年02月16日
    浏览(54)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包