• makefile(详细讲解)


    1.makeflie

    makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率
    make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建
    我们使用makefile就在当前目录下创建makefile/Makefile前单字母大写小写都可以。
    makefile里面会有什么东西呢?
    makefile里面会有依赖关系
    依赖关系 :比如有个可执行文件test,但是想有它就要有test.c这个就叫做依赖关系,而使用test.c形成test这个就叫依赖方法
    了解了这个我们就来正式使用makefile
    在马克file输入下面代码,注意第二行不是用空格,一定要用TAB键
    在这里插入图片描述
    我们再把mytest.c文件给写上
    在这里插入图片描述
    这个时候我们就可以直接make,再运行make生成的可执行文件运行就行了
    在这里插入图片描述

    但是我们想要清理文件怎么办
    vim makefile
    在这里插入图片描述
    改成那样就可以了.PHONY这是一个伪目标
    输入 make clean就可以清除mytest可执行文件了
    在这里插入图片描述
    而至于为什么默认make是会执行make mytest而不是make clean是因为make mytest在上面,因为它是从上往下默认形成的
    .PHONY:相当于makefile的语法格式中的一个关键字
    比如clean被.PHONY修饰时,表明:总是被执行的
    那么我们先来了解下总是不被执行的,比如下面的make 因为生成了mytest
    所以接下的make除了第一次创建以外都会报错
    在这里插入图片描述
    而总是被执行就不会有这种问题,想执行多少次就执行多少次
    在这里插入图片描述
    但是它是怎么区分目标文件的新旧的
    在这里插入图片描述
    Access表示读取或者进入的时间
    再了解下面二个,我们先回忆下文件 = 内容加属性
    Modify表示内容变了的时间
    Change表示属性变了的时间
    看下面图片我们只改变了属性,可以看到只有change时间变了
    在这里插入图片描述
    但是这里要注意修改了内容,可能会改变属性,因为改变了内容,大小可能会发生变化
    那么我们现在就来证明,因为旧文件比新文件生成的旧那么就不生成
    在这里插入图片描述
    那么我们来用touch来改下Modiy的更新时间看看make会不会成功,我们不改原代码
    在这里插入图片描述
    可以看到重新生成了

    2.多个文件执行makefile

    依次创建以下文件
    test.c

    #include"test.h"
    
    
    void show()
    {
      printf("hello hello hello \n");
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    test.h

    #include
    
    
    extern void show();
    
    • 1
    • 2
    • 3
    • 4

    main.c

    #include"test.h"
    
    int main()
    {
      show();
      return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    makefile文件

    hello:main.o test.o
    		gcc -o hello main.o test.o
    main.o:main.c
    		gcc -c main.c -o main.o
    test.o:test.c
    		gcc -c test.c -o test.o
    .PHONY:clean
    clean:
    		rm -f *.o hello
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

  • 相关阅读:
    K8s集群初始化遇到的问题
    关于实现 Vue 动态数据显示,比如数字 0 或 1 怎么显示为 男 或 女等等的动态显示实现方法
    寻找领域不变量:从生成模型到因果表征
    发展前景好、薪资高,计算机行业成为许多人改变命运的首选!
    基于控制性能指标的重放攻击编码检测方案
    使用VueCli快速搭建项目
    CSS接触
    Git实战技巧-比较不同分支之间的差异和代码的改动
    Redis-Mysql八股总结
    8.1.1 创建空数据表
  • 原文地址:https://blog.csdn.net/li1829146612/article/details/126650556