Получение Quiet Make для вывода командных строк при ошибке - PullRequest
5 голосов
/ 20 октября 2008

У меня есть Makefile, создающий много файлов C с длинными длинными командными строками, и мы очистили вывод, имея такие правила, как:

.c${MT}.doj:

        @echo "Compiling $<";\
         $(COMPILER) $(COPTS) -c -o $@ $<

Теперь это здорово, поскольку @ подавляет вывод строки компиляции. Но когда мы получаем ошибку, мы получаем только сообщение об ошибке, а не командную строку. Кто-нибудь может придумать «аккуратный» способ вывода командной строки? Все, что я могу придумать, это перевести его в файл и сделать на более высоком уровне команду make, которая поймает ошибку и отследит файл. Хаки, я знаю.

Ответы [ 4 ]

7 голосов
/ 22 апреля 2012

Этот вопрос довольно старый, но для тех из вас, Гугл, я думаю, что я буду делать в этой ситуации псевдоним make - make -s (тихий режим) в моей оболочке, и только поставить @ префикс перед строками, где вызываются echo или другие диагностические команды. Когда я хочу получить полный вывод от make, я переопределю свой псевдоним, назвав его \make.

Также обратите внимание, что в этой ситуации вам нужно будет выполнить обычную задачу и поместить @echo в свою собственную строку, с фактическими командами правил в отдельных строках и без @.

7 голосов
/ 20 октября 2008

Протестировано и работает (GNU make в Linux):

.c${MT}.doj:
     @echo "Compiling $<";\
          $(COMPILER) $(COPTS) -c -o $@ $<  \
          || echo "Error in command: $(COMPILER) $(COPTS) -c -o $@ $<" \
          && false
0 голосов
/ 20 октября 2008

Недавно я использовал утилиту под названием logtext для отслеживания того, какие выходные данные были получены в ходе выполнения файла bat. Проверьте это, вы можете найти это довольно полезным, если вы хотите знать, где и где произошла ошибка.

0 голосов
/ 20 октября 2008

Простым решением будет использование простого сценария abc, например, следующего:

#!/bin/bash

$@
code=$?
if (( code )); then
  echo error running $@
fi
exit $code

Тогда вы можете написать abc $(COMPILER) $(COPTS) -c -o $@ $< в вашем Makefile. Обратите внимание, что это не работает, если у вас есть каналы или перенаправления (так как они будут применяться к abc вместо команды, которую вы хотите выполнить).

Вы также можете просто поместить аналогичный код непосредственно в Makefile, если это предпочтительнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...