我对 MAKE 的理解正确吗?

Posted

技术标签:

【中文标题】我对 MAKE 的理解正确吗?【英文标题】:Is my understanding of MAKE correct? 【发布时间】:2011-05-16 02:34:12 【问题描述】:

以 GNU make 应用程序为例,当我创建一个 makefile 时,它​​类似于 Visual Studio 项目文件,因为它包含文件列表和编译应用程序所需的其他项目。 makefile 包含编译器的路径以及可能在编译操作中使用的所有文件的路径。 MAKE 应用程序读取 makefile 并将源代码组合成 1 个文件,然后编译器读取该文件并将其转换为相关的程序集/机器代码。

#include 指令是一个指令,它告诉 make 文件: “将此文件的内容包含到您要提供给编译器的较大文件的这一点中,然后使用当前文件继续”。

一旦编译完成,MAKE 应用程序还会告诉编译器在哪里“发出”编译操作的结果。在这方面,Visual Studio .csproj 文件在技术上是基于 XML 的生成文件,用于 Microsoft 特定的 MAKE 应用程序。

这种对makefile的理解正确吗?

【问题讨论】:

【参考方案1】:

大约,是的。然而,有许多细节需要吹嘘。

以 GNU make 应用程序为例,当我创建一个 makefile 时,它​​类似于 Visual Studio 项目文件,因为它包含文件列表和编译应用程序所需的其他项目。

这相当接近准确。

makefile 包含编译器的路径以及编译操作中可能使用的所有文件的路径。

makefile 通常不包含编译器的路径,尽管它可以。它将包含可能在编译中使用的文件列表。

MAKE 应用程序读取 makefile 并将源代码合并为 1 个文件,然后编译器读取该文件并将其转换为相关的程序集/机器代码。

这不是很准确。细节有所不同,但聚合不是由 MAKE 完成的,而是由 MAKE 调用的编译器完成的。除了简单的源代码到机器代码的翻译之外,MAKE 还可用于其他任务。

#include 指令是一个指令,它告诉 make 文件:“将此文件的内容包含到您要提供给编译器的较大文件的该点中,然后使用当前文件恢复”。

GNU Make(和 POSIX Make)支持 include 指令来合并 makefile 的其他片段。 C 和 C++ 编译器识别 #include 指令 - 并且 makefile 通常需要简要说明编译程序需要哪些头文件(包含在 #include 指令中)。但是,#include 是 makefile 中的简单注释。

MAKE 应用程序还告诉编译器在编译完成后在哪里“发出”编译操作的结果。

makefile 包含有关生成的代码应放置在何处的信息,并告知编译器是否需要知道。

在这方面,Visual Studio .csproj 文件在技术上是基于 XML 的生成文件,用于 Microsoft 特定的 MAKE 应用程序。

这是描述的合理近似值。

【讨论】:

【参考方案2】:

具体来说,你是对的,makefile 可以以这种方式使用,而且经常如此。通常,make 实用程序通过以下规则解决依赖关系,这些规则说明哪些项目(主要是文件)依赖于其他项目,以及要采取哪些步骤(例如编译操作)来实现依赖关系。 makefile 中的变量和规则遵循 make 实用程序的语法。

【讨论】:

以上是关于我对 MAKE 的理解正确吗?的主要内容,如果未能解决你的问题,请参考以下文章

我对 PHP 会话的理解正确吗?

我对声明和定义的理解正确吗?

我对A20线检查代码的理解是否正确?

ObjectA.Signal.connect(ObjectB.Slot) 不工作。我的理解正确吗?

我对 Spark 中并行操作的理解是不是正确?

C:我对堆和堆栈分配细节的理解是不是正确?