Может ли GNU Make добавить префикс к эхо-строкам рецептов?

Я использую GNU Make и хотел бы, чтобы он добавлял префикс к каждой команде рецепта по мере ее повторения. Например, с учетом этого make-файла:

foo:
    echo bar
    echo baz

Фактическое поведение:

$ make -B foo
echo bar
bar
echo baz
baz

Желаемое поведение:

$ make -B foo
+ echo bar
bar
+ echo baz
baz

(В данном случае + - это префикс.)

Было бы неплохо, если бы я мог настроить, что такое префикс, но это не обязательно.


person Reid    schedule 25.02.2013    source источник


Ответы (2)


Самый простой способ - изменить переменную make SHELL. В этом случае запуск оболочки с параметром -x должен помочь. Что-то типа

$ make SHELL:='bash -x'

Или даже

$ make .SHELLFLAGS:='-x -c'

в таком случае. Для более сложных выводов отвечает всем требованиям сценарий быстрой оболочки:

$ cat script
#!/bin/bash
echo "EXECUTING [$*]"
$*

с последующим

$ make SHELL:=./script .SHELLFLAGS:=
person bobbogo    schedule 27.02.2013
comment
Затем для этого необходимо добавить к каждому рецепту в make-файле префикс @ (или использовать .SILENT), чтобы Make не распечатал команду? - person Reid; 28.02.2013
comment
@Reid Ну, я полагаю, вы также можете использовать параметр -s make. - person bobbogo; 28.02.2013

Это не то, что делает Make естественным образом. Не думаю, что у вас получится лучше, чем ужасный кладж:

define trick
    @echo + $(1)
    @$(1)
endef

foo:
    $(call trick, echo bar)
    $(call trick, echo baz)
person Beta    schedule 25.02.2013