8

问题:


因此,我的问题是:如何在不完全关闭警告的情况下构建我的 QT 项目(或者必须对一百万个无目的的警告进行分类才能找到我自己的)?我可以禁止仅针对 QT 标头的警告吗?

细节:


问题


几个月前,我在 QT-Creator 中开始了一个 QT 项目。当时我使用的是 gcc 4.6。在确定了一些其他优先事项之后,我发现自己直到现在都没有时间从事该项目。在此期间,我转而使用 clang。当我将 QT 项目配置为使用 clang(该项目在 g++ 中编译时没有警告)时,它在 QT 标头本身中生成了大约 263 个警告。主要是符号转换和无法访问的代码。


尝试


为了解决这个问题,我根据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创作者2.6.2
  • QT 4.8.3
  • clang 3.2 版(主干 165250)(llvm/主干 165249)
    • 目标:x86_64-unknown-linux-gnu
4

2 回答 2

2

我将回答我自己的问题,因为事实证明,在这种情况下,这是一个特定的环境怪癖。

我的开发机器上有两份 QT 库,一份是系统范围的,一份是特定于项目的(包含在 VCS 中)。项目库没有包含 qmake,所以我使用了我的系统 qmake,它附加了一个与我在 -isystem 规范中包含的路径不同的路径。为了解决这个问题,我添加了

QMAKE_INCDIR_QT = 

到 qmake.conf(在 qt/mkspecs/unsupported/linux-clang/ 中)

由于项目中的其他人已经将 qmake 用于在其他任何地方使用项目库。

于 2013-04-25T21:00:29.120 回答
2

对于那些偶然发现这个问题的人比作者更普遍的问题。尝试插入:

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>一样

这对我来说非常有效地驯服了 qt。

另请参阅此来源

于 2014-02-02T14:10:13.173 回答