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


    个人主页:Lei宝啊 

    愿所有美好如期而遇


    目录

    背景

    依赖关系

    依赖方法

    实例代码

    原理

    项目清理


    背景

    • 会不会写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中从上到下第一组依赖关系和依赖方法。如果我们的文件依赖列表中的文件找不到,就会向下去找,找到以后执行生成,再返回去执行。

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

  • 相关阅读:
    搭建自己的语义分割平台deeplabV3+
    (四) MdbCluster分布式内存数据库——业务消息处理
    petalinux的module编译
    IntelliJ IDEA 开发Vue项目 ElementUI 未知HTML标记 提示问题的解决
    【数据挖掘】2020奇安信秋招算法方向试卷3 笔试题解析
    当我们写下一个 int a 后计算机发生了什么?
    11.8 - 每日一题 - 408
    快速上手 TypeScript
    安卓APT技术讲解(下)-实现安卓组件化的路由功能
    项目经理必看!用一句话说明你当过项目经理
  • 原文地址:https://blog.csdn.net/m0_74824254/article/details/134236442