11

如何格式化 make 输出(!!仅通过更改 qmake 项目文件!!)。我的编译行继续增长,单行警告/错误几乎消失在它们之间。

我在想类似的东西

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

谢谢你

4

3 回答 3

18

qmake中,您可以添加静默配置选项:

CONFIG += silent

(注意:我认为这是命令。与此类似。)

这应该抑制大部分输出,并且只打印像“编译 ao”这样的行,以及你的警告和错误。我相信这类似于make's.SILENT.指令(我认为这是一个......)

但是,您可能需要小心这一点,因为它会抑制错误解析器喜欢使用的大量信息。例如,如果您正在使用SUBDIRS配置进行编译,则当它更改到不同的目录时不会打印出来。

于 2009-09-29T15:14:51.190 回答
5

有不同的方法。您可以使它们可配置。

  • 如果您在规则中的行前添加@符号,则不会打印命令本身,但会打印其输出。
  • 如果你添加-Werror到你的CFLAGS变量(你确实有一个,不是吗?这是一种常见的做法!),你绝对不会错过任何警告——构建将在第一个之后停止。
  • 您可以将命令的标准输出重定向到/dev/null,只留下错误流(这不适用于您的特殊情况,因为 gcc 通常不会产生输出,但可能对其他命令有帮助)。

不幸的是,qmake只有第二种方法适用。添加到您的项目文件中:

QMAKE_CFLAGS+=-Werror
QMAKE_CXXFLAGS+=-Werror

生成的 makefile 将在调用编译器时使用这些标志,因此构建将在每次警告时停止。


(一旦出现问题,本部分将移至另一个问题)。

对于通常的 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

什么会满足你的需要。

这种带有配置的方法用于生产代码。例如,我在 Ubuntu 的 IcedTea 生成文件中看到了它。

于 2009-09-29T11:51:52.970 回答
0

您可以使用“@”抑制打印输出并回显您想看到的内容:

简单示例:

out.ext:  $(OBJ)
    @echo $(CC) -o out.ext
    @$(CC) -o out.ext $(OBJ) $(OTHER_FLAGS_ETC)
于 2009-09-29T10:32:34.493 回答