Ответ 1
Вы можете сделать "все" цель PHONY (если она еще не указана), которая имеет реальную цель как необходимое условие и делает что-то незаметное:
.PHONY: all
all: realTarget
@echo > /dev/null
Я пишу короткую оболочку script, которая вызывает "make all". Это не критично, но есть ли способ подавить сообщение, говорящее "ничего не делать для всех", если это так? Я надеюсь найти флаг для make, который подавляет это (не уверен, что он есть), но также будет работать дополнительная строка или 2 кода.
FYI Я использую bash.
Изменить: чтобы быть более ясным, я хочу только получать сообщения, что тере нечего делать. В противном случае я хочу отобразить вывод.
Вы можете сделать "все" цель PHONY (если она еще не указана), которая имеет реальную цель как необходимое условие и делает что-то незаметное:
.PHONY: all
all: realTarget
@echo > /dev/null
Я бы хотел улучшить предыдущее решение, просто сделав его немного более эффективным...:)
.PHONY: all
all: realTarget
@true
Флаг -s
молчания делает: make -s all
EDIT: Я изначально ответил, что флаг -q
отключен make. Он работает для меня, хотя manpage указывает -s, --silent, --quiet
как допустимые флаги.
Решение 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 возвращается в стандартный вывод.