$(MAKE) 或 ${MAKE} 在 make 脚本语言中的实际含义是什么

$(MAKE) 或 ${MAKE} 在 make 脚本语言中的实际含义是什么

在整个构建过程中正在$(MAKE)${MAKE}实际执行什么 。make它是否调用一个类似于子例程的过程,即用最简单的术语“调用函数”,或者它是否启动一个递归过程到其自己的文件的开头?

答案1

make程序设置了一个MAKE可以在 makefile 中使用的变量,如$(MAKE)${MAKE}。后者很有用,因为 shell 脚本可以识别该语法,并且可以在两者之间重用一些脚本片段。

除此之外,shell/make 语法之间没有太多重叠,因为make处理事物的方式$$与 shell 不同。

解决问题的要点:MAKE变量有助于递归,因为程序实际上可能没有被命名make(例如,gmakepmake),并且您需要该信息才能在同一程序中成功重复。程序make(但是它被(重新)命名))识别该递归,无论是否使用该变量。

进一步阅读:POSIX 使

答案2

$(MAKE)包含当前 make 程序的路径,除非您覆盖它。

如果您只是调用makemake 实现的名称,$(MAKE)则应仅包含该名称,因为您的 make 实现随后是通过PATH搜索调用的。通过例如调用来检查这一点:

cd /usr/bin
./make -f /dev/null | grep MAKE

如果您通过绝对或相对路径调用 make 实现,则$(MAKE)包含 make 实现的绝对路径名。

这允许您在 make 文件中使用$(MAKE)某种方式,即使这是使用调试消息编译并安装在任何地方的临时二进制文件,您也将始终调用相同的 make 程序。

顺便说一句:您可以通过调用以下命令来获取 make 程序设置的初始值:

$make -f /dev/null -p | grep MAKE

相关内容