【问题标题】:Conditionally disable warnings with qmake/gcc?使用 qmake/gcc 有条件地禁用警告?
【发布时间】:2010-10-21 00:27:35
【问题描述】:

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

在 qmake 中,有没有办法有条件地将 CFLAGS/CXXFLAGS 添加到某些文件和库中?

【问题讨论】:

    标签: c++ gcc conditional compiler-warnings qmake


    【解决方案1】:

    乔纳森,我认为问题在于您的源文件包含来自 3rd 方库的头文件,而您想关闭后者的警告。

    Kevin,我认为您可以使用编译指示来控制警告:gcc diagnostic pragmas

    您可以在任何#includes 之前和之后为 3rd 方库添加这些内容。

    【讨论】:

    • 正确,警告来自第三方标头。我会研究编译指示,但有没有办法可以只将它们注入第三方标头,或者我必须编辑它们的标头?
    • 您可以为第三方标头引入标头包装器。一种蛮力方法是将第三方标头的任何包含放入单个标头中,然后您的应用程序仅在必要时包含该标头。例如。如果您的应用程序使用库 Zed,则创建一个 zed.h 标头,其中包含所有 Zed 标头。然后您可以将编译指示添加到 zed.h。或者只是浏览你的代码并用编译指示包围每个#include
    【解决方案2】:

    如果您使用 -isystem 包含您的库会怎样。

    在项目文件中例如:

    QMAKE_CXXFLAGS += -isystem /usr/local/boost_1_44_0
    

    【讨论】:

      【解决方案3】:

      通常,您会在与您自己的代码不同的目录中构建第三方库,因此您将拥有不同的 makefile,因此您可以为该编译放置一组不同的标志。

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

      【讨论】:

        【解决方案4】:

        凯文,

        qmake CONFIG+=debug QMAKE_CXXFLAGS_WARN_ON=-w QMAKE_CFLAGS_WARN_ON=-w
        

        应该 (如果您愿意,请使用 CONFIG+=release...)

        【讨论】:

        • 这只是全局添加-w,而不是有条件的。
        【解决方案5】:

        正如 Martin 所写,通过

        添加包含目录
        QMAKE_CXXFLAGS += -isystem ...
        

        仅在相应的标题中抑制警告。无需禁用项目(甚至项目范围内)的任何源文件的警告,也无需混淆 #pragmas 或包装文件。

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

        【讨论】:

          猜你喜欢
          • 2010-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-10
          • 2011-01-25
          • 2010-11-01
          • 1970-01-01
          相关资源
          最近更新 更多