你能将每个命令包装在 GNU 的 make 中吗?

Ros*_*ers 5 bash makefile gnu-make

我想在 make 文件中的每个 shell 命令上注入透明的换行命令。类似于 shell 命令之类的东西time。(但是,不是命令time。这是一个完全不同的命令。)

有没有办法为GNU Make将发出的每个 shell 命令指定某种包装器或装饰器

Gil*_*il' 4

有点儿。您可以告诉 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)