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

时间:2009-11-15 23:28:06

标签: c batch-file makefile

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

7 个答案:

答案 0 :(得分:14)

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

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

但是,更常见的是在makefile中指定 dependencies 的图形,在这种情况下, make 会执行 topological sort所有依赖项的 ,以便从最早的先决条件开始,巧妙地构建所有内容,并以正确的顺序构建。

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

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

Make包含 inference engine 。所有版本的make都有 suffix rules ,有些版本还会实现 pattern rules 。结合您的规范(更多规则,通常是定义软件应用程序的规则),结果是 expert system ,它将决定需要编译,链接的内容,根据您提供的数据和命令,在eBay上购买,无论如何。

<小时/> 1。这是一个易于使用的专家系统。天网可能不会出现在复杂的Makefile中的意外拼写中。

答案 1 :(得分:13)

没有。 makefile具有特殊规则,这些规则涉及文件彼此依赖的方式。它不一定按照它的写入顺序执行。

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

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

答案 2 :(得分:7)

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

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

答案 3 :(得分:6)

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

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

答案 4 :(得分:4)

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

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

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

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

答案 5 :(得分:3)

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

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

两种不同的方法可以做两件事。

答案 6 :(得分:1)

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