如何包括Qt';带-isystem(系统头)的s头,带qmake和qt5?
我编译了基于Qt5的项目,并在g++上启用了警告:如何包括Qt';带-isystem(系统头)的s头,带qmake和qt5?,qt,g++,warnings,qt5,qmake,Qt,G++,Warnings,Qt5,Qmake,我编译了基于Qt5的项目,并在g++上启用了警告: # project.pro file QMAKE_CXXFLAGS += -std=c++11 -Wall -Wextra -Wconversion -Weffc++ 编译时,Qt会产生大量警告(1000+只需一个简单的小部件),从而对代码隐藏警告 当指定Qt头而不是-I时,如何告诉qmake使用-issystem开关来抑制警告?我不想关闭警告,我想为我的代码保留它们 注意:我检查了,但它在我的情况下不起作用,它可能只适用于Qt4,我使用Qt
# project.pro file
QMAKE_CXXFLAGS += -std=c++11 -Wall -Wextra -Wconversion -Weffc++
编译时,Qt会产生大量警告(1000+只需一个简单的小部件),从而对代码隐藏警告
当指定Qt头而不是-I
时,如何告诉qmake使用-issystem
开关来抑制警告?我不想关闭警告,我想为我的代码保留它们
注意:我检查了,但它在我的情况下不起作用,它可能只适用于Qt4,我使用Qt5
注2:这是一个问题,我正在寻找解决办法。我使用源代码5.4.1编译的qmake的最新版本,该版本将/include
和/usr/include
中的系统头作为系统头传递,但不传递Qt头
注3:我知道CMake可以工作,但这不是我的选择。您是否在系统路径中安装了Qt?否则qmake将无法通过
-isystem
通过读取mkspec/qconfig.pri
(运行configure
后),可以根据qmake检查哪些路径是系统路径,系统路径设置为qmake\u DEFAULT\u 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
我找到了两种方法来抑制来自Qt头的警告,一种是通过在系统路径中安装Qt(如另一个答案中所建议的),另一种是通过使用GCC标志直接从
pro
文件
$ ./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的devel列表中pro
文件中,只需将-isystem
标志添加到QMAKE\u cxflags
:
# 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创建者“查看”所有Qt头,但GCC会看到-isystem
标志并抑制所有子文件夹的警告“解决方法”是向qmake提交一个补丁,该补丁增加了对这方面的支持。或者切换到cmake,我希望这是一个已解决的问题。我有一个qmake的最新版本(我将编辑问题以提及这一点)。我试过使用CMake:
include_目录(SYSTEM dir1 dir2)
这很有效,但我需要坚持使用qmake。感谢您无需使用$$system
——只需使用$[QT\u安装头]
:)我不知道括号语法——我尝试了使用$$QT\u安装头
,但它不起作用,我缺少括号!我会更新答案。谢谢方法2:如果您在Qt中有多个文件夹,那么应该为每个文件夹添加-isystem$$[Qt\u INSTALL\u HEADERS]/…
:请参阅,这仅适用于类似gcc的编译器。Visual Studio的等效开关是/external:I
。