Я хочу записать как команду, так и ее вывод в файл журнала.Это кажется легким.Просто перенаправьте стандартный вывод в файл журнала.
myrule:
mycommand >> logfile
Но это только регистрирует выходные данные команды.Не сама команда.
Следует ли также выводить команду и перенаправить этот вывод в файл журнала?
myrule:
@echo mycommand >> logile
mycommand >> logfile
Это дублирование «mycommand» не выглядит хорошо, и оно занимает место врецепт.Особенно, если рецепт длинный.
Должен ли я создать функцию и вызывать ее для каждой команды, которую я хочу записать в журнал?
define log_and_run
@echo $(1) >> logfile
$(1) >> logfile
endef
myrule:
$(call log_and_run,mycommand)
Теперь мне не нужно дублировать 'mycommand'.Но теперь «моя команда» менее заметна в рецепте.Внимание обращено на «вызов», а не на «мою команду».
А что если mycommand - что-то вроде
$(CC) -o $@ -Wl,--linkeroption $<
Запятая разделит команду на два аргумента при вызове log_and_run.
Есть ли у кого-нибудь решение для этого, которое не отвлекает внимание от команд и работает для произвольных команд?