在Windows下配置MinGW版Qt的Clang编译器
今天在Windows下安装MinGW版本的Qt5时,发现mkspecs目录下有了win32-clang-g++这个文件夹,看起来MinGW版的qmake似乎也支持Clang的spec了,下面记录了一下验证和配置的过程。
下载与安装Windows版Clang
Clang的安装可以选择下面任意一种方式。
使用LLVM官网预编译版本
在LLVM Download Page页面可以下载LLVM官方预编译好的LLVM Windows包(写这篇时,最新的包是9.0.0)。这个包里面主要包含Clang, LLD, compiler-rt, 还有一些别的LLVM tools之类的,直接安装就可以了。
使用Qt的预编译版本
在Qt Downloads页面可以下载Qt官方预编译好的libClang Windows包(写这篇时,最新的包是8.0.1)。这个包里面主要包含Clang以及一些基本的Clang工具。我这里下载的是libclang-release_80-based-windows-mingw_64.7z
,解压后将bin路径加入系统环境变量以方便正常使用。
手动编译
如果想对编译选项做一些调整,可以手动编译LLVM项目,不过略微耗时了,可以参考LLVM官方文档编译使用。
配置Clang的C++标准库
由于LLVM的标准库libc++并不支持Windows平台,所以Clang需要配置一下,让它使用Qt目录下MinGW的标准库。
以LLVM官网的预编译包为例,直接编译下面这段代码:
1 | #include <iostream> |
会显示fatal error: 'iostream' file not found
的错误,而且我们敲一下clang++ -v
,结果如下:
1 | clang version 9.0.0 (tags/RELEASE_900/final) |
可以看到LLVM官网预编译的Clang默认Target为x86_64-pc-windows-msvc
,是配合msvc编译器使用的,要让Clang使用MinGW,需要为clang指定命令行选项–target,这里可以使用--target=x86_64-pc-windows-gnu
、--target=x86_64-w64-mingw32
,或者--target=x86_64-w64-windows-gnu
。(如果是使用上面Qt预编译版本的Clang则不需要此操作,默认为x86_64-w64-windows-gnu
)。
所以如果在命令行下执行Clang的话,也需要把MinGW的bin目录加入环境变量,这样Clang就会通过g++来寻找头文件与库文件,此操作可以直接set PATH
或者手动添加。而在Qt Creator中执行则不需要,那里已经配置好了环境。
在Qt Creator中配置Clang
配置编译器选项
在Qt Creator编译器中添加Clang的路径并应用,如图所示:
注:如果使用的是Qt预编译版的Clang则只需要让Qt Creator自动发现即可,无需手动添加,LLVM官网的Clang才需要手动添加编译器以使ABI对应。
配置一个新的Kits
这里我直接克隆了一个,将编译器选项都改为Clang后,还要注意将Qt mkspec改为win32-clang-g++
。如图所示:
此处选择GDB而非LLDB作为调试器,是因为LLVM预编译版的ABI不对应,如果有ABI对应的LLDB版本,也可以选择它作为调试器。
配置CMAKE选项(可选)
如果是使用LLVM官网预编译的Clang则需要此步骤,否则可跳过。在CMake Configuration中添加这两行,用以配合Clang的target:
1 | CMAKE_CXX_FLAGS:STRING=--target=x86_64-w64-windows-gnu |
如图所示:
完成上述步骤后,就可以在MinGW版的Qt中使用Clang编译器了,同时支持QMake与CMake。