【问题标题】:how-to add "warnings as error" rule to Qt .pro file?如何将“警告为错误”规则添加到 Qt .pro 文件?
【发布时间】:2011-03-02 04:37:18
【问题描述】:

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

使用Qt 时,qmake 会为您生成Makefile,并且不会在编译命令中包含此选项。我很确定有办法将这样的选项(和其他选项)添加到生成的 Makefile 中,但我想不通。

我该怎么做?

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

【问题讨论】:

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


    【解决方案1】:

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

    QMAKE_CXXFLAGS += -Werror
    

    【讨论】:

      【解决方案2】:

      上述解决方案仅适用于 GCC。 对于两个编译器(VS 和 gcc)使用:

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

      【讨论】:

      • 什么是“展位编译器”?
      【解决方案3】:

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

      所以我的项目文件都包含一个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++ 和其他人,而不会从已安装的头文件中产生大量消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多