[英]Errors in QT headers using clang
因此,我的问题是:如何在不完全关闭警告的情况下构建我的QT项目(或者必须分类一百万个无目的的警告才能找到自己的警告)? 我可以仅对QT标头抑制警告吗?
几个月前,我在QT-Creator中启动了QT项目。 当时我正在使用gcc 4.6。 经过一些其他优先事项的肯定,我发现自己直到现在都没有时间从事该项目。 在此期间,我转而使用clang。 当我将我的QT项目配置为使用clang时(该项目在g ++中编译时没有警告),它在QT标头本身内生成了263条警告。 主要是符号转换和无法访问的代码。
为了解决这个问题,我根据Clang用户手册中的此项添加了-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
我在用:
我将回答我自己的问题,因为事实证明,在这种情况下,这是一个特定的环境怪癖。
我的开发机上有两个QT库副本,一个是系统范围的,另一个是特定项目的(包含在VCS中)。 项目库中未包含qmake,因此我使用了系统qmake,该系统附加了与-isystem规范中不同的路径。 为了解决这个问题,我添加了
QMAKE_INCDIR_QT =
到qmake.conf(在qt / mkspecs / unsupported / linux-clang /中)
由于项目中的其他人使qmake陷入了在其他地方使用项目库的麻烦。
对于那些偶然遇到这个问题的人,有一个比作者更普遍的问题。 尝试插入:
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/QtCore>
编写#include <QtCore>
这对我来说非常有效地驯服了qt。
另请参阅此来源
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.