Показать и выполнить - PullRequest
19 голосов
/ 28 июня 2011

В этом make-файле

dirs = $(shell ls)
clean:
    $(foreach dir,$(dirs),echo $(dir);)

Выход

$ make clean
echo bin; echo install.sh; echo Makefile; echo README.md; echo utils;
bin
install.sh
Makefile
README.md
utils

Почему сначала отображается команда, а затем выполняется? Как я могу опустить первую строку?

Ответы [ 2 ]

35 голосов
/ 28 июня 2011

Добавьте команду с символом @. Пример:

dirs = $(shell ls)
clean:
    @$(foreach dir,$(dirs),echo $(dir);)
4 голосов
/ 15 марта 2018

С Руководство ( 5.2 Повторение рецепта , жирный удар мин):

Обычно make печатает каждую строку рецепта до его выполнения . Мы называем это echo ing, потому что это создает впечатление, что вы сами печатаете строки.

Когда строка начинается с @, эхо-сигнал этой строки подавляется . @ отбрасывается перед передачей строки в оболочку. [...]


В качестве альтернативы:

Флаг -s или --silent для make предотвращает эхо, как если бы все рецепты начинались с @.

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