makefile与批处理文件基本相同吗?

我知道批处理文件的所有内容并且之前已经完成,但我不清楚makefile是什么。 它看起来像一个批处理文件。 有什么相似之处和差异?

不。一个makefile有一些特殊的规则,它们涉及文件相互依赖的方式。 它不一定按照写入的顺序执行。

批处理文件是一系列命令和控制语句。

Makefile通常包含与批处理文件相同的内容,但批处理文件没有直接指示依赖关系的方法,也没有提供将一种文件处理成另一种文件的推断方法。

类似,是的,除了依赖项,拓扑排序,宏处理和专家系统

如果你什么都不做,只是把shell命令放在Makefile中,那么它实际上很像“批处理文件”的目录,并且当指定了相关的命名目标时它会执行每个命令。

但是,更典型的是在makefile中指定依赖关系图,在这种情况下, make会对所有依赖关系进行拓扑排序 ,以便巧妙地从最早的先决条件开始,以正确的顺序构建所有内容。

要完成,我应该补充一点, make也是一个宏处理器。 它面向软件构建系统,因此它在其问题域中提供符号元素的句柄,例如源和目标的名称。

现在,make并不是一个专门的通用专家系统, 1但它确实不仅仅是打包shellcode,技术上它确实适合专家系统定义。

Make包含一个推理引擎 。 make的所有版本都有后缀规则 ,某些版本也实现了模式规则 。 当结合您的规范(更多规则,通常是定义软件应用程序的规则)时,结果是一个专家系统 ,它将决定需要在eBay上编译,链接,购买的内容,这些都取决于您提供的数据和命令。


这是一个易于使用的专家系统。 天网可能不会出现在复杂的Makefile中的意外错字中。

对它进行相当抽象的旋转:

  • 批处理文件以命令式语言编写。
  • Makefile是以声明性语言编写的,用于文件处理(用于构建控制,通常用于构建控制)。

Makefile列出了执行的命令,但它们的结构与顺序命令列表不同。 相反,他们有目标和命令来“制造”它们。 然后make会检查列出的依赖项,并查看需要更新的目标,以实现您告诉它的目标。 有许多隐式规则(假定* .c文件已经知道如何将其编译为* .o甚至构建可执行文件!)和标准变量(例如CFLAGS),因此您可以使用此优势。 而且,与手册页相反,您可以在没有Makefile情况下使用这些隐式规则。

考虑它的最简单的方法是makefile说如何给’A’一个’B’,然后你告诉make你想做什么(例如make all )而不是怎么做。 它计算出各个步骤。

  • GNU make reference

一点也不。 它们在所有编程语言都相似的意义上是相似的(因为它们都是脚本编写的,因此更加如此),但它们的目的却截然不同。

makefile的目的是描述如何构建项目。 这通常意味着创建规则(使用特殊语言),例如:

  1. 每当您看到以.c结尾的文件时,在其上运行程序“gcc”将其编译为“.o”目标文件。
  2. 每当你有一堆“.o”时,将它们链接成“.exe”。

当然这是一个简单的描述。

使用make(makefile语言的“解释器”) 的主要好处是,您可以获得专门为这些类型构建的语法。 例如,make通常负责检查文件是否已更改,以便您不编译没有任何更改的文件。

非常有趣的问题。 使用shell脚本或批处理文件,您可以为计算机提供按顺序执行的说明列表。 它从顶部开始,向下工作直到它到达终点,然后停止。 好的,可能有函数定义,循环和gotos,它们会改变事件发生的确切顺序,但很大程度上说,文件的进度是线性的。

另一方面,Makefile提供了一系列关于如何从某些其他事物中制作某些东西的说明。 当你调用make ,你告诉它你想要什么,它会分析它所拥有的指令,并决定它们为了制定你指定的目标而需要执行哪些指令。 因此,调用makefile时会发生什么,不仅取决于文件本身的内容,还取决于您要求它制作的内容以及文件在该点处的状态。

做两件不同事情的两种不同方法。

Makefile是Make程序的数据。 把它们想象成老家伙在拥有XML之前所做的事情:)