Как отформатировать / изменить выходные данные сборки qmake
Вопрос
как я могу отформатировать вывод make (!!изменив только файл проекта qmake!!).Мои строки компиляции продолжают расти, и однострочные предупреждения / ошибки между ними почти исчезают.
Я думаю о чем-то вроде
$(CC) in.ext -o out.ext
спасибо в связи
Решение
В qmake
, вы можете добавить опцию автоматической настройки:
CONFIG += silent
(примечание:Я думаю, что это команда.Это что-то похожее на это.)
Который должен подавлять большую часть выходных данных и выводить только строки типа "compiling a.o" вместе с вашими предупреждениями и ошибками.Я считаю, что это похоже на make
's .SILENT.
директива (я думаю, это та самая ...)
Однако, возможно, вам захочется быть осторожным с этим, потому что это скрывает много информации, которую любят использовать анализаторы ошибок.Например, если вы компилируете с помощью SUBDIRS
конфигурация, она не будет распечатываться при переходе в другие каталоги.
Другие советы
Существуют разные подходы.И вы можете сделать их настраиваемыми.
- Если вы Добавить
@
знак перед строкой внутри правила не будет напечатана сама команда, но будут напечатаны ее выходные данные. - Если вы Добавить
-Werror
к вашемуCFLAGS
переменная (у вас ведь она есть, не так ли?Это обычная практика!), вы определенно не пропустите ни одного предупреждения - сборка остановится после первого. - Ты можешь перенаправьте стандартный вывод вашей команды на
/dev/null
, оставляя только поток ошибок (это не для вашего конкретного случая, потому что gcc обычно не выдает выходные данные, но может быть полезно для других команд).
К сожалению, для qmake
применим только второй подход.Добавить в файл вашего проекта:
QMAKE_CFLAGS+=-Werror
QMAKE_CXXFLAGS+=-Werror
И сгенерированные make-файлы будут использовать эти флаги при вызове компилятора, поэтому сборка будет останавливаться при каждом предупреждении.
(этот раздел будет перенесен на другой вопрос, как только он появится).
Для обычного make вы можете использовать все это - вы можете сделать все это настраиваемым!Вот такой пример:
trace?=short
ifeq ($(trace),short)
suppress_echo=@
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
что даст столько, сколько вам нужно.
Такой подход, с конфигурацией, используется в производственном коде.Например, я видел это в файлах создания IcedTea в Ubuntu.
Вы можете отключить распечатку с помощью '@' и повторить то, что вы хотите увидеть:
Простой пример:
out.ext: $(OBJ)
@echo $(CC) -o out.ext
@$(CC) -o out.ext $(OBJ) $(OTHER_FLAGS_ETC)