码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 学会make/makefile基本用法


    目录

    make/makefile是什么?

    自动化构建

    举例

    分析 makefile 中的各部分

    依赖关系

    依赖方法

    清理项目

    伪目标

    makefile如何识别生成的目标文件的新旧? 

    验证访问的时间

    验证修改属性的时间

    验证内容更改的时间


    make/makefile是什么?

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

    make是一条命令

    makefile是一个文件

    make调用makefile,两个搭配使用,完成项目自动化构建

    自动化构建

    在makefile中写好我们要编译的东西,使用 make 命令,会自动执行 makefile 中的内容,减少重复写命令的实践,提高效率。

    举例

    接下来使用 make 命令:

    分析 makefile 中的各部分

    依赖关系

    :前面是想要生成的文件,后面是此文件要生成所依赖的源文件

    相当于写在makefile中的——(目标文件:源文件 )—— 就是依赖关系

    依赖方法

    依赖方法的上方是依赖关系,只有依赖关系是达不到我们得到目标文件的目的,还需要依赖方法,相当于——源文件生成目标文件的步骤——就是依赖方法 

    而 make 命令,可以通过依赖关系来自动调用依赖方法,make 和 makefile 工具可以提前写好命令,防止命令的错误书写,也更加方便

    清理项目

    上述我们是根据依赖关系和方法生成了项目,在 makefile 中也是支持清理项目:

    伪目标

    一般会在用 .PHONY 来修饰 clean ,而被  .PHONY 修饰的目标都称为伪目标:

    伪目标表示:目标总是被执行的

    这句怎么理解,有总是被执行,就有总是不被执行举例如下:

    上图中目标 test 未被 .PHONY 修饰为伪目标,那么他不会一直执行:

    下面我们将 test 修改为伪目标:

    再次频繁调用 make:

    makefile如何识别生成的目标文件的新旧? 

    上述提到了,不是伪目标的话,生成一次目标后,再次调用 make ,是不能再次调用依赖方法,重新生成目标的,因为我们要再次生成的目标根和已经生成的目标是完全相同的,那么makefile是如何识别新旧目标来防止重复生成的呢?

    答案:makefile 会根据对比旧目标和源文件的--内容更改的时间,来确定新目标要不要生成,源文件的时间晚,则表明源文件被更改过,重新编译生成目标,若目标的时间晚,则不用重新生成。

    文件有三个时间:

    验证访问的时间

     说明了 makefile 是不是根据访问时间来判断是否重新生成目标的

    验证修改属性的时间

    说明了 makefile 是不是根据属性修改时间来判断是否重新生成目标的

    验证内容更改的时间

    说明了 makefile 是否重新调用依赖方法生成目标,是对比目标和源文件谁记录的内容更改时间更晚,源文件更晚,则会重新生成目标!

     

  • 相关阅读:
    C# Onnx Yolov8 Pose 姿态识别
    RabbitMQ实践——搭建多人聊天服务
    Spring Data JDBC - 如何对聚合根进行部分更新?
    【编程技巧】用size_t定义数量有什么好处
    win10搭建Selenium环境+java+IDEA(2)
    【C++】lambda函数
    基于.net C# Socket WinForm MQTT 客户端开发
    基于Java SSM仓库管理系统
    vue3.0+echarts, 图正常渲染, 但tooltip不显示
    腾讯云我的世界mc服务器配置选择(价格值得)
  • 原文地址:https://blog.csdn.net/weixin_53316121/article/details/126183362
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号