• <Linux复习>make/Makefile


    一、本章重点

    1、复习Linux项目自动化构建工具make/Makefile

    2、stat命令

    3、写一个进度条

    01 make/Makefile

    首先需要了解的是:make是个命令,Makefile是个文件

    直接上怎么使用

     Makefile文件里写的都是依赖关系和依赖方法

    依赖关系:mytest:test.c、clean:空

    依赖方法:gcc test.c 0o mytest、rm -f mytest

    clean这个目标文件被.PHONY修饰了,我们一般称被.PHONY修饰的目标文件为伪目标。

    作用:让clean的依赖方法总是被执行。

    具体什么是总是被执行,我们先来了解什么是可能不被执行。

     当mytest为最新的目标文件就不再执行对应的依赖方法了。

    这里可以继续深入了解一下如何判断mytest是最新的可执行程序呢?

    先介绍一下"ACM时间"

    Access:代表的是最新访问时间

    Modify:代表文件内容的最新改变时间

    Change:代表文件属性的最新改变时间

     当我们修改test.c的属性数据时,只有Change值发生了变化。

    现在我们可以解释的是,如果可执行程序比源文件的内容Modify时间晚,说明源文件就是最新的,就不需要重新生成可执行了,因此就不再执行依赖方法了。

    如果给mytest加上.PYHONY(类是于关键字),那么mytest对应的依赖方法总是被执行的,说明白点就是不管最不最新,都执行mytest的依赖方法。

     

    但我们一般不用.PHONY修饰可执行程序,因为这样可能会有效率的损失。 

    需要知道的是:一般使用make命令都是 make + 目标文件/伪目标 ,但第一行的目标文件可以省略,也就是可以直接make,而不用make mytest(可以用)。

    还有一个值得提问的问题:为啥.PHONY要修饰clean呢?

    clean不被.PHONY修饰不是也能总是被执行吗?

    这里我把.PHONY给去掉了,然后在试试

     不给clean添加.PHONY视乎也能总是被执行,但下面这总情况就不能总是执行了。

     如果当前目录下有clean文件,那么make clean就不能总是被执行了

    因为clean没有依赖,按说每次都会执行,但是由于当前文件夹存在clean文件,要拿clean文件和目标相比哪个更新,但是由于没有目标,make始终认为clean文件是最新的,因而不会执行相应的rm命令。

    02 stat

    功能:显示文件详细信息,可显示三种时间。

    Access:代表的是最新访问时间

    Modify:代表文件内容的最新改变时间

    Change:代表文件属性的最新改变时间

    Access有点特殊

     按理说,访问了test.c文件,那么Access时间也会改变,但上面的Access并没有改变,这是因为我们访问test.c的操作可能是最频繁的,如果不断的修改Access时间,就得不断的进行io操作,这样会降低效率,因此在最新的Linux内核只会当访问test.c足够多的次数之后,才会去修改Access时间。

    03 进度条小程序

    如果要严格区分换行和回车

    换行:

     回车:

     严格来说\n是指回车+换行,但现在一般都叫它换行,\r叫做回车。

    1、需要美观的话,可使用printf进行颜色输出。

    2、 同时关于使用fflush刷新缓冲区的问题,会在后面详细解答。

  • 相关阅读:
    低代码与无代码平台的选型建议
    Git查询某次提交属于哪个分支
    ClickHouse引擎之-MaterializeMYSQL
    GPT-4 到底能帮你干点啥?
    C++ 动态规划。。。
    【正点原子STM32连载】第五十五章 FPU测试(Julia分形)实验 摘自【正点原子】APM32F407最小系统板使用指南
    虾皮市场中店铺定位是什么,如何做好产品线布局?这些东西你有了解吗?
    django请求生命周期流程图 路由匹配 无名分组 有名分组 反向解析 无名有名反向解析 路由分发 名称空间
    R 语言nutrient数据集的可视化
    APP逆向案例之(三)sign 参数破解
  • 原文地址:https://blog.csdn.net/m0_62171658/article/details/127074213