GNU Умолкнуть по умолчанию

Можно ли отключить эхо-команду по умолчанию из Makefile?

Я знаю, что это будет работать в режиме make в --silent, так как будет префикс каждой команды с @.

Я ищу команду или строфу, я могу включить внутри Makefile, сохраняя проблему засорения всего с помощью @ или с отключением пользователя все вручную.

Ответ 1

Если вы определяете цель .SILENT:, тогда make не будет эхом ничего. Обычно лучше всего защищать определение, поэтому вы можете легко отключить его:

ifndef VERBOSE
.SILENT:
endif

Теперь по умолчанию make ничего не печатает, но если вы запустите make VERBOSE=1, он напечатает.

Обратите внимание, что несмотря на выражение в руководстве, в котором утверждается, что .SILENT устарел - если он правильно защищен, он обычно намного лучше (более полезен и гибкий), чем @.

Цель .SILENT target не должна быть первой на вашем Makefile, иначе make будет использовать ее по умолчанию.

Ответ 2

Вы можете добавить --silent в переменную MAKEFLAGS в начале вашего Makefile:

MAKEFLAGS += --silent

all:
    echo foobar

.PHONY: all

И у вас будет:

$ make
foobar

Ответ 3

Согласно инструкции GNU Make, вы можете использовать специальную цель .SILENT.

Обратите внимание, что в руководстве сказано, что:

.SILENT по сути устарел, так как ‘@более гибок.

Но, похоже, работает как ожидалось. Следующий код заставляет замолчать цель all:

.SILENT:

hoge:
    echo hoge

Следующий пример заставляет замолчать только цель hoge:

.SILENT: hoge

hoge:
    echo hoge

fuga:
    echo fuga