我对 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 的理解正确吗?的主要内容,如果未能解决你的问题,请参考以下文章