如何在Qt .pro文件中添加“警告为错误”规则?

时间:2010-06-10 13:45:09

标签: c++ qt g++ warnings qmake

当我经常处理C++项目时,我要做的第一件事就是在编译器上设置“将警告视为错误”。

使用Qt时,qmake会为您生成Makefile,并且不会在编译命令中包含此选项。我很确定有一种方法可以将这样的选项(以及其他选项)添加到生成的Makefile中,但我无法弄明白。

我该怎么做?

我正在使用Qt的开源版本和g++作为编译器。

3 个答案:

答案 0 :(得分:12)

您可以在pro文件中使用QMAKE_CXXFLAGS来指定编译器标志:

QMAKE_CXXFLAGS += -Werror

答案 1 :(得分:6)

上述解决方案仅适用于GCC。 展位编制者(VS和gcc)使用:

win32-g++ {
   QMAKE_CXXFLAGS += -Werror
}
win32-msvc*{
   QMAKE_CXXFLAGS += /WX
}

答案 2 :(得分:0)

有一个名为QMAKE_CXXFLAGS_WARN_ON的QMake变量,只要CXXFLAGS包含CONFIG,就会包含在warn_on中。

所以我的项目文件都包含common.pri,其中包含:

CONFIG += warn_on

dirty_build: CONFIG += noopt

!dirty_build: WARNINGS += -Werror

# Turn on warnings, except for code that is Qt-generated
WARNINGS += -Wextra
WARNINGS += -Wunknown-pragmas -Wundef
WARNINGS += -Wold-style-cast
WARNINGS += -Wdisabled-optimization -Wstrict-overflow=4
WARNINGS += -Weffc++ -Wuseless-cast
WARNINGS += -Winit-self -Wpointer-arith
WARNINGS += -Wlogical-op
WARNINGS += -Wunsafe-loop-optimizations -Wno-error=unsafe-loop-optimizations
QMAKE_CXXFLAGS_WARN_ON += $(and $(filter-out moc_% qrc_%, $@),$${WARNINGS})

存在filter-out以禁用Qt生成的元对象和资源文件的警告。

我也有

# Override the C and C++ targets to selectively replace -I with -isystem for include paths
QMAKE_RUN_CC            = $(CC) -o $obj -c $(CFLAGS) $(subst -I/usr/include,-isystem /usr/include,$(INCPATH)) $src
QMAKE_RUN_CC_IMP        = $(CC) -o $@ -c $(CFLAGS) $(subst -I/usr/include,-isystem /usr/include,$(INCPATH)) $<
QMAKE_RUN_CXX           = $(CXX) -o $obj -c $(CXXFLAGS) $(subst -I/usr/include,-isystem /usr/include,$(INCPATH)) $src
QMAKE_RUN_CXX_IMP       = $(CXX) -o $@ -c $(CXXFLAGS) $(subst -I/usr/include,-isystem /usr/include,$(INCPATH)) $<

这允许我启用-Weffc++和其他人,而不会从安装的头文件中产生大量消息。