问题

在Qt Creator的构建套件(Kit)中,自动检测的Kit很多都会有黄色的叹号,可以把鼠标移动到上面可以看到有警告,是各种各样的警告,有些是调试器没设置,有些是名字不唯一,有些是C编译器或者C++编译器没配置。这里遇到的问题是:

Warning: The compiler “MinGW-w64 MINGW64 C++ (MSYS2)” (x86-windows-msys-pe-64bit) may not produce code compatible with the Qt version “Qt 6.2.0 (mingw64)” (x86-windows-msys-pe-64bit).

从下图可以看到,C编译器,C++编译器,调试器以及CMake都是配置了的:

根据警告提示,可以知道是编译器有问题,看看编译器的情况,从上图可以知道编译器是使用的MinGW-w64 MINGW64的C/C++编译器,如下图所示:

我们选中MinGW-w64 MINGW64的C编译器可以到ABI是x86-windows-msys-pe-64bit,再看看C++的编译器,发现是自定义,问题就出在这里,需要统一为x86-windows-msys-pe-64bit,但是这里修改不了,需要修改配置才行。

解决办法一

选中只有该问题的套件,然后克隆一个套件,这时就可以编辑C/C++编译器了,选中MinGW的C/C++编译器然后设置为默认,后面构建时都使用这个套件来构建。

解决办法二

Qt检测这些配置都是配置在文件中的,以MSYS2的MinGW64为例,Qt Creator的配置都放在:/mingw64/share/qtcreator下,而构建套件、Qt版本、编译器、调试器、CMake这些的配置都在:/mingw64/share/qtcreator/QtProject/qtcreator下。

  • cmaketools.xml:CMake工具的配置,主要是CMake工具的路径、显示的名称、以及ID
  • debuggers.xml:调试器的配置,主要是每个调试器的路径、显示的名称、以及ID
  • qtversion.xml:Qt版本的配置,主要是每个版本的名称、路径、设备类型(是桌面、安卓、IOS等)
  • toolchains.xml:工具链,即C/C++编译器的配置,主要是每个编译器的路径、支持的ABI、目标的ABI、显示的名称、ID、语言(C/Cxx)
  • profiles.xml:构建套件(Kit)配置,主要是每个套件的名称、套件ID、CMake的名称、调试器的ID、设备类型、C/C++编译器ID、Qt信息等

选中要修改的套件,把名称全部复制下来,在profiles.xml中去查找

有两条匹配的记录,其实就是Qt 5.15.8(shared)以及Qt 6.5.0(shared)的

然后找到C/C++的编译器ID配置,通过前面的分析,是C++的编译器有问题:

复制ProjectExplorer.ToolChain.Mingw:M2_MinGW-w64_MINGW64_CXX,在toolchains.xml中去找,如下图所示,可以看到C++编译器支持的ABI是MINGW64-windows-msys-pe-64bit,而C编译器支持的ABI是x86-windows-msys-pe-64bit,这就导致C++编译器显示的ABI是自定义,我们需要改成与C编译器一致的ABI,改为x86-windows-msys-pe-64bit,保存即可。

关闭Qt Creator,再重新打开,查看构建套件,前面的黄色叹号不存在了。

这样的修改会有一个问题就是这些文件都是由SDKTool生成的,如果有更新或者重新安装Qt Creator可能会导致失效,需要再重新修改。