为qmake中的所有文件设置“将警告视为错误”

时间:2015-03-10 09:54:05

标签: c++ qt visual-c++ qt-creator qmake

我想为除一个以外的所有文件指定“将警告视为错误”标志。例如,如果我有a.cpp,b.cpp和c.cpp,这将适用于所有3:

SOURCES += a.cpp \
    b.cpp \
    c.cpp
QMAKE_CXXFLAGS += /WX

但是我该怎么做才能只有a.cpp和b.cpp有那个标志但是c.cpp没有?例如,我试过这个(但它不起作用):

SOURCES += a.cpp \
    b.cpp \
    c.cpp
QMAKE_CXXFLAGS += /WX
c.cpp: QMAKE_CXXFLAGS -= /WX

修改:我看到有How to specify separate compilation options for different targets in qmake?http://permalink.gmane.org/gmane.comp.lib.qt.general/10945。但是我需要取消指定某个文件的标志(相反),所以我不确定这是否适用于我。所提供的解决方案也适用于GCC(我不是MSVC)。

修改2 :是否可以在源文件本身内使用/WX取消设置#pragma

2 个答案:

答案 0 :(得分:1)

从头脑中,我想到了两种处理你情况的方法:

  1. 将源文件列表拆分为多个(不相交)列表。对于源文件的每个子列表,编译一个包含所需编译器标志的临时静态库。然后将最终的应用程序/库链接到所有临时静态库。相当麻烦!

  2. 使用#pragma语句指示编译器忽略某些警告。这取决于您的编译器。对于海湾合作委员会,请参阅

    1. https://stackoverflow.com/a/3394268
    2. https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html
    3. 对于Microsoft编译器来说,这可能是一个好的开始:

      1. https://msdn.microsoft.com/en-us/library/2c8f766e.aspx

答案 1 :(得分:0)

似乎没有一个好的解决方案。这是我最后做的:

我将QMAKE_CXXFLAGS += /WX放在.pro文件中,然后将#pragma warning(push, 0)放在我想要排除的每个.cpp文件的开头。

这不会禁用“将警告视为错误”标志,它只会禁用警告,但由于我们通常希望排除第三方代码,因此这是一个很好的解决方案。