Подавить эхо вызова команды в make-файле?


147

Я написал программу для назначения, которая должна выводить ее вывод на стандартный вывод. Спецификация присваивания требует создания Makefile, который при make run > outputFileзапуске as должен запускать программу и записывать вывод в файл, имеющий отпечаток SHA1, идентичный указанному в спецификации.

Моя проблема в том, что мой make-файл:

...
run:
     java myprogram

также выводит команду, которая запускает мою программу (например, java myprogram) в выходной файл, так что мой файл содержит эту дополнительную строку, приводящую к неправильному отпечатку пальца.

Есть ли способ выполнить команду без вызова команды, повторяющейся в командной строке?

Ответы:


247

Добавьте @в начало команды, чтобы gmake не печатал выполняемую команду. Как это:

run:
     @java myprogram

Как предположил Оли, это особенность Make, а не Bash.

С другой стороны, Bash никогда не будет отображать эхо-команды, которые выполняются, если вы не скажете это сделать явно (то есть с -xопцией).


6
+1. Но просто чтобы прояснить путаницу ОП, возможно, стоит пояснить, что это особенность Make, а не Bash.
Оливер Чарльзуорт

1
@OliCharlesworth: имеет смысл, добавил это. Спасибо.

Есть ли способ отключить все эхо? Или отключить его для раздела, а потом снова включить?
Benubird

2
@Benubird make -sделает это, и ИМХО, в любом случае, является гораздо лучшим решением. Недавно он был опубликован как отдельный ответ на этот вопрос.
tripleee

1
это не работает для оператора if ... then :( есть идеи?
user1623521

74

Еще проще использовать make -s(беззвучный режим)!


3
Upvote: Это действительно должен быть принятый ответ здесь. Опрыскивание вашего Makefile @командами затрудняет отладку и добавляет много беспорядка.
tripleee

11
Я согласен, что это путь, но обратите внимание, в оригинальном описании проблемы я не был бы тем, кто вызывает make - мой инструктор был бы. Таким образом, я не смогу контролировать передаваемые флаги. Мне нужно было контролировать вывод из make-файла. Upvote для наиболее практичного решения в реальном мире, хотя.
Noobler

6
Вы можете контролировать это самостоятельно, используя .SILENT:цель. См. Make.mad-scientist.net/managing-recipe-echoing
MadScientist

На самом деле, если у вас есть предупреждения о том, как -Wallон все еще печатает их. Конечно, зачем использовать, -sесли вы тоже хотите видеть предупреждения?
User81862311

33

Вы также можете использовать .SILENT

.SILENT: run
hi:
     echo "Hola!"
run:
     java myprogram

В этом случае make hiбудет выводиться команда, но make runне будет выводиться.


1

Эффект добавления команды к команде @может быть распространен на раздел путем расширения команды с помощью завершающего обратного слеша в строке. Если требуется .PHONYкоманда для подавления вывода, можно начать раздел с:

@printf "..."
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.