• .c文件怎么变成可执行的应用程序的?


    一些杂谈:

    如果同时编译多个文件,一般用到的指令是

    gcc - o test a.c b.c ... n.c
    

    执行此命令会将所有的.c文件预处理、编译、汇编一遍,最后链接到一起。如果其中某个.c文件被改动了,那么执行上面这条指令,将把所有的.c文件都动一遍重新输出.o文件再链接。

    如果.c文件个数较少,重新处理多个文件不会对系统造成太大的负担,但是如果文件数量过大,只改动一个文件,但是编译却要全部动一遍,将造成不必要的资源浪费,至此有以下解决方案。

    先把所有文件输出成.o文件,最后再链接起来,因为上文所说的“所有.c文件都被动一遍”是在链接的时候做的。

    1. gcc -c -o a.o a.c
    2. gcc -c -o b.o b.c
    3. gcc -o test a.o b.o

    但是有没有发现一个问题,如果每一次编译的时候都这么一个个去敲命令,如果修改的.c文件比较多,记下来也麻烦。

    所以,Makefile应运而生!

    Makefile大家肯定用过,只是没有注意到而已,它就是相当于Windows系统下面各种IDE,例如vscode、keil等软件上面的编译按钮。一般有普通编译和全局编译,普通编译就是将修改的部分编译就行,全局编译就是所有文件重新编译一遍。

    在Linux下,Makefile就是编译按钮,一般是普通编译。该文件在输入make指令以后执行,该文件有固定的编写格式。

    例如:

    1. gcc -c -o a.o a.c
    2. gcc -c -o b.o b.c
    3. gcc -o test a.o b.o
    4. 上面这部分的Makefile文件编写
    5. test : a.o b.o
    6. gcc -o test a.o b.o
    7. a.o : a.c
    8. gcc -c -o a.o a.c
    9. b.o : b.c
    10. gcc -c -o b.o b.c

    详细解释一下就是判断冒号右侧的文件是否比前面的文件日期更新(即后面的文件被改动了)或者没有目标文件

    如果后面文件日期更加新或者没有目标文件,则执行下面的命令。

    注意:之所以不是按照先生成a.o再b.o再链接,是因为这样的话如果a.c和b.c文件同时被改动Makefile里面只执行生成a.o文件而不执行生成b.o文件(实测),更不会生成新的test程序。所有最后一步得调到开头。

    Makefile几个基本语法,用到再继续查找,做个简单记录:

    通配符:%.o(符合.o后缀的文件)、$@(表示目标)、$<(表示第一个依赖文件)、$^(表示所有依赖文件)

    上面的Makefile可以等价替换成这样

    假想变量:避免当前目录下有目标文件时,造成命令无法执行的状况

    即时变量、延时变量

  • 相关阅读:
    从指定路径加载 Python 模块
    基于微信小程序的智能停车场管理系统设计与实现-计算机毕业设计源码+LW文档
    抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。
    黑客(网络安全)技术自学30天
    spring ExpressionParser 四则运算表达式解析参数提取
    【Delphi】让APP“鸡鸣鸟叫”(同时支持ios\android\windows\macos)
    Python实现人脸识别检测,对主播进行颜值排行
    第八章 常用用类
    使用frp进行内网穿透
    一个复制也能玩出花来
  • 原文地址:https://blog.csdn.net/weixin_59622415/article/details/133358774