Существуют разные подходы. И вы можете настроить их.
- Если вы добавить
@
знак в передней линии в правило, сама команда не будет распечатан, но его выход будет.
- Если вы добавить
-Werror
к вашему CFLAGS
переменной (у вас есть одна, не так ли это обычная практика?!), Вы точно не пропустите ни одного предупреждения - сборка остановится после первого.
- Вы можете перенаправить стандартный вывод своей команды на
/dev/null
, оставив только поток ошибок (это не для вашего конкретного случая, поскольку gcc обычно не дает выход, но может быть полезен для других команд).
К сожалению, для qmake
применяется только второй подход. Добавить в ваш файл проекта:
QMAKE_CFLAGS+=-Werror
QMAKE_CXXFLAGS+=-Werror
И Makefiles сгенерированные будут использовать эти флаги, когда они вызывают компилятор, поэтому сборка остановится на каждом предупреждении.
(этот раздел будет перенесен на другой вопрос, как только появится один).
Для обычного использования вы можете использовать все это - вы можете настроить все настройки! Вот пример:
trace?=short
ifeq ($(trace),short)
[email protected]
redirect_to_null=1>/dev/null
else ifeq ($(trace),full)
suppress_echo=
redirect_to_null=
else ifeq ($(trace),werror)
CFLAGS+=-Werror
else
$(error Incorrect trace type "$(trace)"!)
endif
# Thanks to Martin York for the source of this copy-pasted code
out.ext: $(OBJ)
@echo $(CC) $(CFLAGS) -o out.ext $(redirect_to_null)
$(suppress_echo)$(CC) $(CFLAGS) -o out.ext $(OBJ) $(redirect_to_null)
Таким образом, если вы вызываете make
так:
$ make trace=full
он будет печатать все. Если вы вызываете
$ make
значение short
будет использоваться по умолчанию (обратите внимание на ?=
оператор вместо обычного =
!) И правила будет расширяться до такой версии
out.ext: out.o
@echo cc -o out.ext 1>/dev/null
@cc -o out.ext out.o 1>/dev/null
что даст столько, сколько вы необходимость.
Такой подход с конфигурацией используется в производственном коде.Например, я видел это в make-файлах IcedTea Ubuntu.
удивительный. именно то, что мне нужно –