在整个构建过程中正在$(MAKE)
或${MAKE}
实际执行什么 。make
它是否调用一个类似于子例程的过程,即用最简单的术语“调用函数”,或者它是否启动一个递归过程到其自己的文件的开头?
答案1
该make
程序设置了一个MAKE
可以在 makefile 中使用的变量,如$(MAKE)
或${MAKE}
。后者很有用,因为 shell 脚本可以识别该语法,并且可以在两者之间重用一些脚本片段。
除此之外,shell/make 语法之间没有太多重叠,因为make
处理事物的方式$$
与 shell 不同。
解决问题的要点:MAKE
变量有助于递归,因为程序实际上可能没有被命名make
(例如,gmake
,pmake
),并且您需要该信息才能在同一程序中成功重复。程序make
(但是它被(重新)命名))识别该递归,无论是否使用该变量。
进一步阅读:POSIX 使
答案2
$(MAKE)
包含当前 make 程序的路径,除非您覆盖它。
如果您只是调用make
make 实现的名称,$(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