我对MAKE的理解是否正确?

时间:2011-05-16 02:34:12

标签: visual-studio makefile gnu

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

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

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

对makefile的理解是否正确?

2 个答案:

答案 0 :(得分:2)

大约是的。然而,有很多细节可供选择。

  

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

这相当接近准确。

  

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

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

  

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

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

  

#include指令是一个指令,它告诉make文件:“将此文件的内容包含到您正在为编译器提供的较大文件的这一点,然后使用当前文件恢复”。< / p>

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

  

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

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

  

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

这是对描述的合理近似。

答案 1 :(得分:0)

具体来说,你是对的,因为makefile可以这种方式使用,而且经常使用。通常,make实用程序在以下规则中解析依赖性,该规则指出哪些项(主要是文件)依赖于其他项以及将采用哪些步骤(例如编译操作)来实现依赖性。 makefile中的变量和规则遵循make实用程序的语法。