有点儿。您可以告诉 make 使用不同的 shell。
SHELL = myshell
Run Code Online (Sandbox Code Playgroud)
哪里myshell有像这样的包装纸
#!/bin/sh
time /bin/sh "$0" "$@"
Run Code Online (Sandbox Code Playgroud)
但是,通常的方法是将变量添加到所有命令调用的前缀。虽然我看不到该方法有任何阻碍SHELL,但前缀方法的优点是更灵活(您可以为不同的命令指定不同的前缀,并覆盖命令行上的前缀值),并且速度明显更快。
# Set Q=@ to not display command names
TIME = time
foo:
$(Q)$(TIME) foo_compiler
Run Code Online (Sandbox Code Playgroud)
这是一个完整的、有效的 shell 包装器示例:
#!/bin/bash
RESULTZ=/home/rbroger1/repos/knl/results
if [ "$1" == "-c" ] ; then
shift
fi
strace -f -o `mktemp $RESULTZ/result_XXXXXXX` -e trace=open,stat64,execve,exit_group,chdir /bin/sh -c "$@" | awk '{if (match("Process PID=\d+ runs in (64|32) bit",$0) == 0) {print $0}}'
# EOF
Run Code Online (Sandbox Code Playgroud)