如何格式化/更改qmake构建输出

Ron*_*del 10 c++ qt qmake makefile qt4

如何格式化输出(仅通过更改qmake项目文件!!).我的编译线继续增长,一线警告/错误几乎消失了.

我在想类似的东西

$(CC) in.ext -o out.ext
Run Code Online (Sandbox Code Playgroud)

谢谢你

Cal*_*itt 17

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

CONFIG += silent
Run Code Online (Sandbox Code Playgroud)

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

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

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


P S*_*ved 5

有不同的方法.你可以让它们可配置.

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

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

QMAKE_CFLAGS+=-Werror
QMAKE_CXXFLAGS+=-Werror
Run Code Online (Sandbox Code Playgroud)

生成的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)
Run Code Online (Sandbox Code Playgroud)

所以,如果你这样调用make:

$ make trace=full
Run Code Online (Sandbox Code Playgroud)

它会打印一切.如果你调用

$ make
Run Code Online (Sandbox Code Playgroud)

short默认情况下将使用该值(请注意?=操作符而不是通常=!)并且规则将扩展为此类型

out.ext: out.o
    @echo cc  -o out.ext 1>/dev/null
    @cc  -o out.ext out.o 1>/dev/null
Run Code Online (Sandbox Code Playgroud)

什么会提供你需要的东西.

具有配置的这种方法用于生产代码中.例如,我在Ubuntu的IcedTea makefile中看到了它.