C++ 是否有条件地使用qmake/gcc禁用警告?

C++ 是否有条件地使用qmake/gcc禁用警告?,c++,gcc,conditional,compiler-warnings,qmake,C++,Gcc,Conditional,Compiler Warnings,Qmake,我参与了一个用Qt编写的软件项目,该项目是在Linux上用qmake和gcc构建的。我们必须链接到一个第三方库,它的质量相当低,并且会发出大量警告。我想在我们的源代码中使用-W-Wall,但是将-W传递给讨厌的第三方库以保持控制台没有噪音和混乱,这样我们就可以专注于代码质量 在qmake中,有没有一种方法可以有条件地将CFLAGS/cxflags添加到某些文件和库中?通常情况下,您会将第三方库与自己的代码构建在一个单独的目录中,这样您就有了一个不同的makefile,这样您就可以为该编译设置不同

我参与了一个用Qt编写的软件项目,该项目是在Linux上用qmake和gcc构建的。我们必须链接到一个第三方库,它的质量相当低,并且会发出大量警告。我想在我们的源代码中使用-W-Wall,但是将-W传递给讨厌的第三方库以保持控制台没有噪音和混乱,这样我们就可以专注于代码质量


在qmake中,有没有一种方法可以有条件地将CFLAGS/cxflags添加到某些文件和库中?

通常情况下,您会将第三方库与自己的代码构建在一个单独的目录中,这样您就有了一个不同的makefile,这样您就可以为该编译设置不同的标志


如果您将第三方库代码与自己的代码混合在一起,那么您将面临一场维护噩梦。

Jonathan,我认为问题在于您的源文件包含来自第三方库的头文件,您希望关闭后者的警告

Kevin,我想你可以用pragmas来控制警告:

您可以在第三方LIB的任何“包含”之前和之后添加这些内容。

Kevin

qmake CONFIG+=debug QMAKE_CXXFLAGS_WARN_ON=-w QMAKE_CFLAGS_WARN_ON=-w
应该做
(如果您愿意,请使用CONFIG+=release…

如果您使用-isystem包含您的库,该怎么办

在项目文件中,例如:

QMAKE_CXXFLAGS += -isystem /usr/local/boost_1_44_0

正如Martin所写,通过添加include目录

QMAKE_CXXFLAGS += -isystem ...
仅在相应的标题中抑制警告。无需对项目的任何源文件(甚至整个项目)禁用警告,也无需乱用#pragmas或wrappers文件


请注意,如果您正在使用QtCreator,您仍然(即另外)希望将目录添加到
INCLUDEPATH
,以便索引器拾取标题。

正确,警告来自第三方标题。我将研究pragmas,但是有没有一种方法可以只将它们注入到第三方头中,或者我必须编辑它们的头?您可以为第三方头引入头包装器。一种蛮力方法是将第三方头的任何include放入单个头中,然后您的应用程序只在必要时包含该头。例如,如果您的应用程序使用库Zed,则创建一个包含所有Zed头的Zed.h头。然后可以将pragmas添加到zed.h。或者只需遍历代码并用pragmas围绕每个#include。这只是全局地添加-w,而不是有条件地添加。