gpt4 book ai didi

qt - 如何在 qmake 和 qt5 中包含带有 -isystem(系统头文件)的 Qt 头文件?

转载 作者:行者123 更新时间:2023-12-04 00:52:16 25 4
gpt4 key购买 nike

我编译了我的基于 Qt5 的项目,并在 g++ 上启用了警告:

# project.pro file
QMAKE_CXXFLAGS += -std=c++11 -Wall -Wextra -Wconversion -Weffc++

编译时,Qt 会产生大量警告(仅一个简单的小部件即可产生 1000 多个警告),从而将这些警告从我的代码中隐藏起来。

如何告诉 qmake 使用 -isystem指定 Qt 的头文件而不是 -I 时切换抑制警告?我不想关闭警告,我想为我的代码保留它们。

注意:我检查了 this SO question但它在我的情况下不起作用,它可能仅适用于 Qt4,我使用 Qt5。

注意 2:这是一个 acknowledged bug ,我正在寻找解决方法。我使用从源 5.4.1 编译的最新版本的 qmake,该版本通过来自 /include 的系统头文件和 /usr/include作为系统头文件而不是 Qt 的头文件。

注意 3:我知道 CMake 可以工作,但这对我来说不是一个选择。

最佳答案

我找到了两种方法来抑制来自 Qt header 的警告,一种方法是在系统路径中安装 Qt(如另一个答案中所建议的),另一种方法是直接从您的 pro 安装 Qt。文件通过使用 GCC 标志。

  • 在构建自己的 Qt 时,将 header 的安装路径配置为您的系统路径之一:
    $ ./configure -headerdir /usr/local/include

    系统路径为 /usr/include/usr/local/include或以下所列的其余之一:
    $ grep DEFAULT_INCDIRS mkspecs/qconfig.pri
    QMAKE_DEFAULT_INCDIRS = /usr/include/c++/4.8 /usr/include/x86_64-linux-gnu/c++/4.8 /usr/include/c++/4.8/backward /usr/lib/gcc/x86_64-linux-gnu/4.8/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed /usr/include/x86_64-linux-gnu /usr/include

    来源:this thread在 Qt 的开发列表中。
  • 或直接在您的 Qt pro文件,只需添加 -isystem旗成QMAKE_CXXFLAGS :
    # the line below suppresses warnings generated by Qt's header files: we tell
    # GCC to treat Qt's headers as "system headers" with the -isystem flag
    QMAKE_CXXFLAGS += -isystem $$[QT_INSTALL_HEADERS]

    生成的 GCC 命令行如下所示:
    g++ -c -pipe -isystem /usr/local/Qt-5.4.1/include -Wall ...
    -I/usr/local/Qt-5.4.1/include
    -I/usr/local/Qt-5.4.1/include/QtWidgets
    ...

    注意 Qt 的包含路径如何仍然添加 -I ,允许 Qt Creator“看到”所有 Qt 头文件,但 GCC 看到 -isystem标记并禁止所有子文件夹的警告。
  • 关于qt - 如何在 qmake 和 qt5 中包含带有 -isystem(系统头文件)的 Qt 头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30513594/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com