Как отформатировать / изменить выходные данные сборки qmake

StackOverflow https://stackoverflow.com/questions/1491671

  •  18-09-2019
  •  | 
  •  

Вопрос

как я могу отформатировать вывод 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top