2012-04-01 3 views
61

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

Моя проблема заключается в том, что мой Makefile:

... 
run: 
    java myprogram 

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

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

ответ

110

Добавить @ в начало команды, чтобы сообщить gmake не печатать исполняемую команду. Например:

run: 
    @java myprogram 

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

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

+3

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

+0

@OliCharlesworth: имеет смысл, добавил, что. Благодарю. –

+0

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

0

Эффект, предшествующий команде с помощью @, может быть расширен до «раздела» путем расширения команды с использованием обратной обратной косой черты в строке. Если для подавления вывода требуется фальшивая команда , можно начать секцию с @printf "" \

+1

Не могли бы вы привести пример с кодом? – Dennis

25

Еще проще: make -s (бесшумный режим)!

+0

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

+4

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

Смежные вопросы