我的问题是:如何在不完全关闭警告的情况下构建我的QT项目(或者必须通过一百万无目的的事情来找到我自己的警告)?我可以仅针对QT标头抑制警告吗?
几个月前,我在QT-Creator开始了一个QT项目。那时我正在使用gcc 4.6。经过一些其他优先事项后,我发现自己没有时间在项目上工作到现在为止。在过渡期间,我转而使用clang。当我配置我的QT项目使用clang时 - 在g ++中没有警告的情况下编译的项目 - 它在QT标题本身内生成了大约263个警告。主要是符号转换和无法访问的代码。
为了尝试解决此问题,我在this entry in the Clang User Manual添加了-isystem / path / to / QT / include / dir,但它似乎没有影响任何内容。虽然我不确定,但我认为这是因为我的代码#include
是名称的QT标题,而不是目录。虽然解决方案可能是手动列出所使用的每个QT标头(尚未尝试过),但这意味着每次升级QT或使用新标头时我都必须更新它。当然有一个更好的解决方案。
这里要求的是正在执行的实际编译命令:
clang++ -c -pipe -Qunused-arguments -Weverything -cxx-isystem /path/to/qt/4.8.3/include/ -g -D_REENTRANT -DQT_NO_KEYWORDS -DQT_SHARED -I/path/to/qt/x86_64/4.8.3/mkspecs/unsupported/linux-clang -I. -I.moc -I.ui -I/path/to/qt/4.8.3/include/ -o .obj/main.o main.cpp
我正在使用:
答案 0 :(得分:2)
我会回答我自己的问题,因为事实证明,在这种情况下,这是一个特定的环境怪癖。
我的开发机器上有两个QT库副本,一个系统范围和一个特定项目(包含在VCS中)。项目库没有包含qmake,所以我使用了我的系统qmake,它附加了一个与我在系统规范中包含的路径不同的路径。为了解决这个问题,我添加了
QMAKE_INCDIR_QT =
到qmake.conf(在qt / mkspecs / unsupported / linux-clang /中)
由于该项目的其他人已经将qmake弄乱到其他地方使用项目库。
答案 1 :(得分:1)
对于那些比作者更常见的问题偶然发现这个问题的人。 尝试插入:
LIBS_USED_FOR_QT = QtCore QtSql QtMultimediaWidgets QtSensors QtSvg QtXml QtPrintSupport QtWidgets QtQuick QtQml QtPositioning QtGui QtWebKitWidgets
for(somelib, $$list($$LIBS_USED_FOR_QT)) {
QMAKE_CXXFLAGS += -isystem $$(QTDIR)/lib/$${somelib}.framework/Versions/5/Headers/
QMAKE_CXXFLAGS += -isystem $$(QTDIR)/lib/$${somelib}.framework/Headers/
}
<。>在你的.pro文件中。
另外避免像#include <QtCore/QtCore>
这样的包含
写#include <QtCore>
代替
这对我来说非常有效。