因此我的问题是:如何在不完全关闭警告的情况下构建我的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
Run Code Online (Sandbox Code Playgroud)
我在用:
我将回答我自己的问题,因为事实证明,在这种情况下,这是一个特定的环境怪癖。
我的开发机器上有两份 QT 库副本,一份是系统范围的,一份是特定于项目的(包含在 VCS 中)。项目库不包含 qmake,因此我使用了系统 qmake,它附加了与我在 -isystem 规范中包含的路径不同的路径。为了解决这个问题,我添加了
QMAKE_INCDIR_QT =
Run Code Online (Sandbox Code Playgroud)
到 qmake.conf (在 qt/mkspecs/unsupported/linux-clang/ 中)
由于项目中的其他人煽动 qmake 在其他地方使用项目库。