Can you wrap each command in GNU's make?

I want to inject a transparent wrap command on each shell command in a make file. Something like the time shell command. (However, not the time command. This is a completely different command.)

Is there a way to specify some sort of wrapper or decorator for each shell command that GNU Make will issue?


  • Kind of. You can tell make to use a different shell.

    SHELL = myshell

    where myshell is a wrapper like

    time /bin/sh "$0" "$@"

    However, the usual way to do that is to prefix a variable to all command calls. While I can't see any show-stopper for the SHELL approach, the prefix approach has the advantage that it's more flexible (you can specify different prefixes for different commands, and override prefix values on the command line), and could be visibly faster.

    # Set Q=@ to not display command names
    TIME = time
        $(Q)$(TIME) foo_compiler

    And here's a complete, working example of a shell wrapper:

    if [  "$1" == "-c" ] ; then
    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