我通过使用一个脚本定义了我自己的
make
包装器,该脚本在每次调用time
之前包含对make
的调用(更新路径,以便bash
首先找到我的make,等等)。脚本看起来像:
#!/bin/bash
time /usr/bin/make -w "$@"
echo "Finished: make $@"
但是,当使用
make
在 Makefile
内调用 $(MAKE)
时,make
正在调用 /usr/bin/make
。例如:
target:
$(MAKE) -C subfolder
当我执行
make target
时,我的脚本正在被使用,但是,/usr/bin/make
识别正在调用的确切二进制文件(本身),并使用该确切的二进制文件来扩展 $(MAKE)
。
如何使用脚本获取对
make
或 $(MAKE)
的所有调用?或者一般来说,如何强制对 make
进行所有调用,无论以何种方式调用(普通 make
或 $(MAKE)
),其前面都有一个 time
并包含选项 -w
?
注意:无需修改任何现有 makefile 的文本。
答案很简单:不要使用
$(MAKE)
,而是使用你自己的脚本。
如文档所述:
制作
调用 make 时使用的名称。在配方中使用此变量具有特殊含义。查看 MAKE 变量如何工作。
在“MAKE变量如何工作”中你可以看到
该变量的值是调用 make 的文件名。 ...如果您使用特殊版本的 make 来运行顶级 makefile,则将执行相同的特殊版本以进行递归调用。
使用自己的脚本进行子制作的缺点是,您将失去使用自动导出的变量和参数的能力,除非将它们导出到环境中或作为子制作的手动参数。但如果您不使用它们,您可以轻松执行以下操作:
target:
cd subfolder && mymake
在此处阅读有关
make
的递归使用的信息:
https://www.gnu.org/software/make/manual/make.html#Recursion