我编译了基于Qt5的项目,并在g ++上启用了警告:
# project.pro file
QMAKE_CXXFLAGS += -std=c++11 -Wall -Wextra -Wconversion -Weffc++
编译时,Qt会产生大量警告(1000+只有一个简单的小部件),隐藏了我的代码中的警告。
如何在指定Qt的标题时告诉qmake使用-isystem
开关,而不是-I
来抑制警告?我不想关闭警告我希望将它们留给我的代码。
注意:我检查了this SO question但它在我的情况下不起作用,它可能仅适用于Qt4,我使用Qt5。
注意2:这是一个acknowledged bug,我正在寻找一种解决方法。我使用从源代码5.4.1编译的最新版qmake,此版本从{传递系统头文件{1}}和/include
作为系统标题,但不是Qt的标题。
注3:我知道CMake会起作用,但对我来说这不是一个选择。
答案 0 :(得分:13)
我找到了两种方法来抑制来自Qt标头的警告,一种方法是在系统的路径中安装Qt(如另一个答案所示),另一种方法是使用GCC标志直接从pro
文件中安装。
构建自己的Qt时,请将标头的安装路径配置为您的系统路径之一:
$ ./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
来源:Qt开发列表中的this thread。
或直接在您的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
标志并禁止所有子文件夹的警告。
答案 1 :(得分:2)
您是否在系统路径中安装了Qt?否则qmake将无法通过-isystem
。
您可以通过阅读mkspec/qconfig.pri
(运行configure
之后)根据qmake检查哪些路径是系统路径,系统路径设置为QMAKE_DEFAULT_INCDIRS
变量。这里:
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