2009-09-29 3 views
9

Как я могу отформатировать вывод make (!!, только изменив файл проекта qmake !!). Мои линии компиляции продолжают расти, и однолинейные предупреждения/ошибки почти исчезают между ними.Как форматировать/изменять выход qmake build

Я имею в виду что-то вроде

$(CC) in.ext -o out.ext 

благодаря в отношении

ответ

16

В qmake, вы можете добавить бесшумный вариант конфигурации:

CONFIG += silent 

(примечание:.. Я думаю, что это команда Это что-то похожее на это)

Который должен подавить большую часть продукции, и только строки печати, такие как «компиляция ao», вместе с вашими предупреждениями и ошибками. Я считаю, что это похоже на make 's .SILENT. директива (я думаю, это тот ...)

Возможно, вы захотите быть осторожным с этим, потому что он подавляет много информации, которую используют партизаны ошибок. Например, если вы компилируете конфигурацию SUBDIRS, она не будет распечатана, когда она изменится на разные каталоги.

+0

удивительный. именно то, что мне нужно –

0

Вы можете подавить распечатку с «@» и повторить то, что вы хотите увидеть:

Простой пример:

out.ext: $(OBJ) 
    @echo $(CC) -o out.ext 
    @$(CC) -o out.ext $(OBJ) $(OTHER_FLAGS_ETC) 
+0

Я хочу сделать магию незамкнутой и только внутри qmake. Извините за путаницу. –

+1

ОП запросил qmake –

5

Существуют разные подходы. И вы можете настроить их.

  • Если вы добавить @ знак в передней линии в правило, сама команда не будет распечатан, но его выход будет.
  • Если вы добавить -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.

+0

Я хочу сделать магию незаметной и только внутри qmake. Извините за путаницу. –

+0

+1: для -Werror. Это лучшее предложение IMO, и это _can_ будет сделано в вашем файле проекта. – Troubadour

+0

@hydroes: отредактировал мой ответ, чтобы попытаться соответствовать вашим потребностям –

 Смежные вопросы

  • Нет связанных вопросов^_^