GNU make 和 makefile 语法类似于 Linux shell 和 bash,但并不相同。例如,大括号的用法与 shell 或 bash 中的用法不同。
然而,shell 中的许多其他命令可以按原样使用,例如:echo、cd 等。
将 GNU Make 视为 shell 之上的解释器是否正确?
答案1
将 GNU Make 视为 Linux shell 的扩展是否正确?
这取决于您如何定义术语“shell 扩展”。
您可以定义任何向 shell 添加功能的程序都是“shell 的扩展”。
在这种情况下,每个基于命令行的程序都将是“shell 的扩展”。
然而,如果你想知道 Makefile 是否可以被视为“改进的 shell 脚本”,答案肯定是“不”:
虽然 Makefile 规则中的命令是 shell 命令(就像 shell 脚本的行一样),但 Makefile 的使用方式与 shell 脚本完全不同。
并且(至少在 99% 的情况下)有效的 Makefile 不是有效的 shell 脚本,反之亦然。
您可以编写一个类似于 shell 脚本的 Makefile;然而,这根本没有意义。
答案2
GNU Make 不是 shell 扩展。它是一个独立的程序,与 shell 执行不同的操作,并且其语法恰好与 shell 类似(出于一致性目的)。
Make 是一种构建自动化工具,它通过读取指定如何导出目标程序的名为 Makefile 的文件,自动从源代码构建可执行程序和库。
GNU Make 是一个控制从程序源文件生成程序的可执行文件和其他非源文件的工具。 Make 了解如何从名为 makefile 的文件构建程序,该文件列出了每个非源文件以及如何从其他文件计算它。
答案3
一旦你进入命令部分,它就非常相似。
Makefile 的格式为:
- 目标(二进制文件)
- 先决条件(依赖项/库)
- 命令(脚本)
虽然某些 Makefile 的外观/格式略有不同(Makefile.am 与 package.mk 等),但它们通常都遵循这种格式。