C语言本质

除了Hello World这种极简单的程序之外,一般的程序都是由多个源文件编译链接而成,这些源文件 的处理步骤通常用Makefile来处理。

Makefile包含基本规则、隐含规则、模式规则,它能够自动处理头文件的依赖关系,常用make命令行选项。在c语言的编译下,main是这条规则的目标(Target),像main.o、stack.0和maze.o是这些规则的条件。目标和条件的关系是:欲更新目标,必须首先更新它的所有条件;所以条件中只要有一个条件被更新了,目标也随之被更新了。所谓的“更新”就是执行一遍规则中的命令列表,命令列表中的每条命令必须以一个Tab开头,需要注意的是不是空格,Makefile的格式不像C语言那么的随意,对于Makefile中的每个以Tab命令开头的命令,make会创建一个Shell进程去执行它。

make执行的时候通常有一个过程以及步骤。make首先尝试更新Makefile中第一条规则的目标main,第一条规则的目标成为缺省目标,只要缺省目标更新了就算完成任务了,其它工作都是为这个目标而做的。接着main会进一步查找以条件为目标的规则,这些目标文件也没有生成,也需要更新,所以执行相应的命令更新它们。最后执行命令来更新main。

Makefile的规则:如果一条规则的目标属于以下情况之一,就称为需要更新。一是目标没有生成;二是某个条件需要更新;三是某个条件修改的时间比目标晚。 在一条规则被执行之前,规则的条件可能处于以下三种状态之一:需要更新。能够找到以该条件为目标的规则,并且该规则中目标需要更新。不需要更新。能够找到以该条件为目标的规则,但是该规则中目标不需要更新;或者不能 找到以该条件为目标的规则,并且该条件已经生成。错误。不能找到以该条件为目标的规则,并且该条件没有生成。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 来自陈浩的一片老文,但绝对营养。 示例工程:3 个头文件*.h,和 8 个 C 文件*.c。 初 编译过程,源文件...
    周筱鲁阅读 10,148评论 0 17
  • @(linux 编程)[开发技能, 工具使用] What is GNU Make Make 是控制工程中通过源码生...
    orientlu阅读 13,895评论 0 26
  • makefile关系到整个工程的编译规则,一个工程中的源文件不计其数,按其类型、功能、模块分别放在若干的目录当中,...
    Joe_HUST阅读 5,849评论 0 3
  • 本文章介绍了makefile跟kconfig文件,包括编译过程与makefile编码规则。 编译过程:我们在进行l...
    超低空阅读 17,565评论 0 5
  • 第一次写作,或许又谈不上写作 每一次情绪低落的时候总能收到很多来自朋友甚至陌生人的鼓励和安慰,我就觉得世界对我特别...
    白善书阅读 2,507评论 0 3