Подтвердить что ты не робот

Подавить "ничего не сделать для" все "

Я пишу короткую оболочку script, которая вызывает "make all". Это не критично, но есть ли способ подавить сообщение, говорящее "ничего не делать для всех", если это так? Я надеюсь найти флаг для make, который подавляет это (не уверен, что он есть), но также будет работать дополнительная строка или 2 кода.

FYI Я использую bash.

Изменить: чтобы быть более ясным, я хочу только получать сообщения, что тере нечего делать. В противном случае я хочу отобразить вывод.

4b9b3361

Ответ 1

Вы можете сделать "все" цель PHONY (если она еще не указана), которая имеет реальную цель как необходимое условие и делает что-то незаметное:

.PHONY: all

all: realTarget
    @echo > /dev/null

Ответ 2

Я бы хотел улучшить предыдущее решение, просто сделав его немного более эффективным...:)

.PHONY: all
all: realTarget
        @true

Ответ 3

Флаг -s молчания делает: make -s all

EDIT: Я изначально ответил, что флаг -q отключен make. Он работает для меня, хотя manpage указывает -s, --silent, --quiet как допустимые флаги.

Ответ 4

Решение grep:

{ make all 2>&1 1>&3 | grep -v 'No rule to make target `all' >&2; } 3>&1 

Конструкция 2>&1 1>&3 отправляет make stdout в fd 3 и делает stderr в stdout. grep затем читает из предыдущей команды stdout, удаляет строку нарушения и отправляет ее stdout в stderr. Наконец, fd 3 возвращается в стандартный вывод.