使用clang的QT标头中的错误

时间:2013-04-25 18:18:50

标签: c++ qt4 clang

的问题:


我的问题是:如何在不完全关闭警告的情况下构建我的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

功能


我正在使用:

  • Linux 3.2.0-40-generic#64-Ubuntu SMP x86_64 GNU / Linux
    • 虽然我团队中的其他人使用Windows
  • QT creator 2.6.2
  • QT 4.8.3
  • clang version 3.2(trunk 165250)(llvm / trunk 165249)
    • 目标:x86_64-unknown-linux-gnu

2 个答案:

答案 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>代替

这对我来说非常有效。

另见this source