近年来,Clang在开发者社区中越来越受欢迎,因为它提供了强大的性能和优化能力,同时还具备良好的可读性和可维护性。微软为了让更多开发者能够享受到Clang的优点,决定将Clang带入Windows平台,于是我们就有了Windows Clang。然而,对于很多开发者来说,如何安装和使用Windows Clang可能是一个难题。本文将为您提供详细的教程,让我们一起来了解一下吧!
具体方法:
一、下载llvm的windows版本
https://github.com/llvm/llvm-project/tags
选择对应版本的windows版本
例如
二、clang的使用
在windows下clang指令只是负责编译的前端工作,即识别编译指令,与提供报错提示。并不负责具体的代码编译工作,所以在windows下光安装llvm是不够的,还需要有实际的编译链接库,例如安装MinGW或者MSVC来获取需要的运行库
注意:
使用前请将clang.exe所在的目录添加到环境变量PATH中,一般clang.exe在llvm安装目录内的bin目录下
gcc风格的编译指令参数
默认情况下clang的基本编译指令参数与gcc是一样的,所以按照gcc的用法来使用clang即可。也可以显式指定clang的指令风格为gcc风格,需要用到--driver-mode=gcc
示例:
# 默认按gcc风格来给定编译参数 clang -Wall -g3 -o main.exe main.c clang -Wall -g3 -o main.exe main.cpp clang++ -Wall -g3 -o main.exe main.cpp # 显式说明以gcc风格来给定编译参数 clang --driver-mode=gcc -Wall -g3 -o main.exe main.c clang --driver-mode=gcc -Wall -g3 -o main.exe main.cpp clang --driver-mode=g++ -Wall -g3 -o main.exe main.cpp # clang等价于clang --driver-mode=gcc # clang++等价于clang --driver-mode=g++
注意:
1. 因为clang使用的默认工具链是msvc,所以这里编译cpp、c时,不需要区分是使用clang还是clang++,但是-o后面如果不指定是.exe后缀文件,编译出来的可执行文件不会自动添加.exe后缀
2. 如果用target参数指定使用MinGW工具链,编译cpp、c时,必须区分是clang还是clang++,但是-o后面指定的文件不用特意加上.exe后缀,会自动生成.exe后缀的可执行文件
msvc风格的编译指令参数
要用msvc风格的编译参数,需要使用--driver-mode=cl 参数,或者使用clang-cl指令
# 按msvc风格来给定编译参数 clang --driver-mode=cl /W3 /Zi /EHsc /MDd /Fe:main.exe main.c # 按msvc风格来给定编译参数 clang-cl /W3 /Zi /EHsc /MDd /Fe:main.exe main.c # clang-cl等价于clang --driver-mode=cl
指定使用MinGW还是使用MSVC
在windows10上,clang不管是gcc风格还是msvc风格。默认情况下clang都是使用MSVC提供的工具链来进行具体编译的,可以使用-v参数来查看clang默认的Target
示例:
windows下64位clang一般默认是x86_x64-pc-windows-msvc
windows下32位clang一般默认是i686-pc-windows-msvc
MinGW-32对应clang中的target是i686-pc-windows-gnu
MinGW-64对应clang中的target是x86_64-pc-windows-gnu
指定Target的方法
# 默认gcc风格时,可以是如下两种形式 clang -target i686-pc-windows-msvc clang --target=i686-pc-windows-msvc # 如果使用了clang-cl或者指定--driver-mode=cl,则只能使用下面形式 clang-cl --target=i686-pc-windows-msvc clang --driver-mode=cl --target=i686-pc-windows-msvc
注意:
使用MinGW工具链时,编译c、cpp时一定要区分clang和clang++。或者显式地指定--driver-mode=g++来编译cpp程序
指定生成32位程序还是64位程序
# 指定使用msvc编译32位程序,如果是32位clang,则无需特别指定target clang --target=i686-pc-windows-msvc -Wall -g3 -o main.exe main.c clang --target=i686-pc-windows-msvc -Wall -g3 -o main.exe main.cpp # gcc风格时,还可以直接使用-m32来指定32位程序 clang -m32 -Wall -g3 -o main.exe main.c clang -m32 -Wall -g3 -o main.exe main.cpp # cl风格则只能通过设置target来指定32位程序 clang-cl --target=i686-pc-windows-msvc /W3 /Zi /Fe:main.exe main.c clang-cl --target=i686-pc-windows-msvc /W3 /Zi /Fe:main.exe main.cpp # 使用msvc编译64位程序,64位clang无需特别指定target clang -target x86_64-pc-windows-msvc -Wall -g3 -o main.exe main.c clang -target x86_64-pc-windows-msvc -Wall -g3 -o main.exe main.cpp # gcc风格时,还可以直接使用-m64来指定64位程序 clang -m64 -Wall -g3 -o main.exe main.c # cl风格则只能通过设置target来指定64位程序 clang-cl --target=x86_64-pc-windows-msvc /W3 /Zi /Fe:main.exe main.c clang-cl --target=x86_64-pc-windows-msvc /W3 /Zi /Fe:main.exe main.cpp # 使用MinGW-GCC来编译 # 生成32位程序 clang -target i686-pc-windows-gnu -Wall -g3 -o main main.c clang++ -target i686-pc-windows-gnu -Wall -g3 -o main main.cpp # 生成64位程序 clang -target x86_64-pc-windows-gnu -Wall -g3 -o main main.c clang++ -target x86_64-pc-windows-gnu -Wall -g3 -o main main.cpp
注意:
clang选择使用MinGW编译32位或64位程序的前提是,已经安装了32位和64位版本的MinGW,并且两个版本都要在环境变量PATH中,并且64位版本要在32位版本前面(否则会编译报错,具体原因不知道)
以上就是关于windows clang怎么使用的全部内容,有出现相同情况的用户就可以按照小编的方法了来解决了。
相关教程
2023-10-17
2024-08-11
2023-08-19
2023-03-22
2023-12-23
2024-12-27
2024-12-27