在Windows下配置Clang编译器
Preferences
- Linux & macOS 平台LLVM 相关工具链下载
- 2019年,在Windows下配置Clang编译器
- Visual Studio 2022 中使用 Clang
- clion使用clang编译
- Clion 2020.3:如何设置Clang编译器
这篇文章主要介绍如何在Windows使用Clang编译器来编译C/C++程序(在命令行下,clang是C编译器,编译C++需要使用clang++)。
简介
基于LLVM强大的模块性和优化能力,作为C/C++编译器的Clang后发优势惊人。
- Firefox在所有平台上都是用Clang编译了:Firefox is now built with clang LTO on all* platforms
- Chrome在Windows上也使用Clang来编译:Clang is now used to build Chrome for Windows
Windows 安装 Clang 预编译好的二进制包
在 LLVM Download Page 页面可以下载预编译好的 Clang Windows 包(目前最新的包是17.01)。这个包里面内容还挺全的,包含Clang Tools和Extra Clang Tools。
手动编译
如果你不想使用预先编译好的包,比如你想对编译选项做一些调整,可以手动编译Clang。可以参考下面文档:
- https://llvm.org/docs/CMake.html
- https://clang.llvm.org/get_started.html
- Getting Started with the LLVM System using Microsoft Visual Studio¶
有几个关键步骤在这里阐述一下:
到
下载源代码:
- cfe-7.0.1.src.tar.xz
- clang-tools-extra-7.0.1.src.tar.xz
- llvm-7.0.1.src.tar.xz
把上面的源代码解压后放在正确的目录下:
- llvm-7.0.1.src.tar.xz 解压并重命名成llvm
- cfe-7.0.1.src.tar.xz解压llvm/tools目录下,并重命名成clang
- clang-tools-extra-7.0.1.src.tar.xz解压到llvm/tools/clang/tools目录下,并重命名成extra
安装Visual Studio 2017 (Community版即可)
安装CMake和GnuWin32Utils
在llvm目录下创建一个build目录,并进入
打开命令行提示符(确保CMake和GnuWin32Utils都在PATH中),执行
cmake -G "Visual Studio 15 2017" -A x64 -Thost=x64 ..用Visual Studio打开LLVM.sln,设置目标项目为ALL_BUILD,配置类型为Release,然后开始构建。睡个午觉之后,差不多就编译好了,生成的文件在build/Release目录下
C++标准库
Clang的C++标准库[libc++](https://libcxx.llvm.org/)看起来不支持Winodws,所以用clang++编译下面这个C++程序的时候:
#include <iostream>
using namespace std;
int main() {
cout << "Hello!" << endl;
return 0;
}
会显示错误:
clang++.exe: warning: unable to find a Visual Studio installation; try running C
lang from a developer command prompt [-Wmsvc-not-found]
a.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
^~~~~~~~~~
1 error generated.
解决这个问题有两个办法,一个是使用Visual Studio提供的C++库,另一个是使用MinGW提供的GCC的C++标准库(libstdc++)。
使用Visual Studio的C++库
这是Clang的默认选项。
执行clang -v可以看到:
clang version 17.0.1
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: D:\Soft\Language\LLVM\bin
默认的Target是x86_64-pc-windows-msvc,也就是使用isual Studio的C++标准库。
如果你安装了全套的Visual Studio (建议 VS2017之后的版本),那么从开始菜单的Visual Studio目录下打开Visual Studio的命令行,在这个命令行里面使用clang编译C++,clang会自己找到相应的C++库。
如果你没有安装全套的Visual Studio也不要紧,其实所需要的只是Visual Studio Build Tools,可以在VisualStudio Download下面。 关于如何使用Build Tools,可以参照这篇文章 How to compile C++ code with VS Code and Clang or Windows Tools | How To Install VS Microsoft C++ Build Tools on Windows。
使用Visual Studio或者其相关的工具需要受到微软的License约束,目前Visual Studio的Community版本可以用于个人或者非商业项目。如果公司项目中使用Visual Studio Community版则有点违反授权的意味。
Update:
根据https://devblogs.microsoft.com/cppblog/updates-to-visual-studio-build-tools-license-for-c-and-cpp-open-source-projects/,https://visualstudio.microsoft.com/visual-cpp-build-tools/的授权限制放宽了。
使用MinGW提供libstdc++
是的,Clang可以从GCC那借用C++标准库,也就是libstdc++。在Windows上MinGW项目提供了一个Windows版的GCC,包含libstd++可供Clang使用。
在MinGW的下载页面可以看到很多下载选项,适合Windows的有Cygwin、MingW-W64-builds和Msys2。
没什么别的需求的话,可以选用MingW-W64-builds。
Update:
可以从下面地址获取较新的基于MinGW的GCC:
MingW-W64-builds提供一个安装器,来帮你选择合适的编译版本。最主要的是要选好i686版本,还是x86_64版本。本文以x86_64为例。
要让Clang使用MinGW,需要为clang指定命令行选项-target x86_64-pc-windows-gnu,但是我们执行clang++ -target x86_64-pc-windows-gnu a.cpp发现a.cpp:1:10: fatal error: 'iostream' file not found的错误依然存在。
这主要是因为MinGW默认安装在C:\Program Files\mingw-w64下面,Clang找不到MinGW。使用额外的-v选项,我们可以发现:
clang -cc1 version 7.0.1 based upon LLVM 7.0.1 default target x86_64-pc-win32
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include\c++"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include\c++\x86_64-w64-mingw32"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include\c++\backward"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include\c++\"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include\c++\\x86_64-w64-mingw32"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include\c++\\backward"
ignoring nonexistent directory "C:\Program Files\LLVM\include\c++\"
ignoring nonexistent directory "C:\Program Files\LLVM\include\c++\\x86_64-w64-mingw32"
ignoring nonexistent directory "C:\Program Files\LLVM\include\c++\\backward"
ignoring nonexistent directory "include\c++"
ignoring nonexistent directory "include\c++\x86_64-w64-mingw32"
ignoring nonexistent directory "include\c++\backward"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32/sys-root/mingw/include"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include
"
#include "..." search starts here:
#include <...> search starts here:
C:\Program Files\LLVM\lib\clang\7.0.1\include
C:\Program Files\LLVM\include
End of search list.
a.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
^~~~~~~~~~
1 error generated.
Clang默认在自己的安装目录C:\Program Files\LLVM下查找MinGW。要解决这个问题,一个办法是把MinGW安装或者链接到Clang需要的目录。
此外还有一个办法,就是把MingGW的g++命令添加到PATH环境变量中去。以我的MinGW安装为例,在命令行中执行
set path=C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin;%path%
然后Clang就可以通过g++顺藤摸瓜,找到相应的头文件和库。
其他
- How to build the latest clang-tidy
- 解决Clang在Windows下无法使用的问题
- 在VS Code中使用Clang作为你的C++编译器
- Homebrew LLVM receipe
- How to use clang with mingw-w64 headers on windows
- LLVM MinGW
- Clang C++ Cross Compiler - Generating Windows Executable from Mac OS X
- Clang+llvm windows运行环境配置
- Installing Clang 3.5 for Windows
- Home / Guide to predefined macros in C++ compilers (gcc, clang, msvc etc.) edit
- How to compile C++ for Windows with clang in Visual Studio 2015
- HackerNews: mingw-w64 llvm maintainer/developer here.
- Setting up Clang on Windows
- General notes on compiler support
- How To Cross-Compile Clang/LLVM using Clang/LLVM
- build llvm again
- https://github.com/martell/mingw-w64-clang
- https://github.com/mstorsjo/llvm-mingw
- https://github.com/tpoechtrager/wclang
- http://blog.johannesmp.com/2015/09/01/installing-clang-on-windows-pt1/
- https://stackoverflow.com/questions/32239122/what-do-you-need-to-install-to-use-clang-on-windows-to-build-c14-for-64-bit
- https://stackoverflow.com/questions/14023696/how-to-set-up-clang-to-use-mingw-libstdc
- https://www.reddit.com/r/cpp/comments/3pe6j9/why_should_i_use_clang_over_g/
在Windows下配置Clang编译器的更多相关文章
- QT + OpenCV + MinGW 在windows下配置开发环境
由于研究项目需要,最近开始接触C++界面设计,关于“QT + OpenCV + MinGW在windows下配置开发环境”着实让人头疼,单次配置时间相当长,也十分不容易,本人第一次配置成 ...
- windows 下配置 Nginx 常见问题(转)
windows 下配置 Nginx 常见问题 因为最近的项目需要用到负载均衡,不用考虑,当然用大名鼎鼎的Nginx啦.至于Nginx的介绍,这里就不多说了,直接进入主题如何在Windows下配置. 我 ...
- Windows下配置使用 MemCached
Windows下配置使用MemCached 工具: memcached-1.2.6-win32-bin.zip MemCached服务端程序(for win) Memcached Manage ...
- windows下配置wnmp
最近尝试windows下配置nginx+php+mysql,在这里总结一下. 1.下载windows版本的nginx,官网下载地址:http://nginx.org/en/download.htm, ...
- windows下配置lamp环境(5)---配置MySQL5.6
开始配置mysql 1.创建配置文件my.ini 1.进入C:\wamp\MySQL 2.把my-default.ini 另存一份:my.ini 3.开始编辑mysql的配置文件,打开my ...
- windows下配置lamp环境(3)---配置PHP5.4
下面配置php Php文件夹里有两个php.ini-*文件,随便修改一个,去掉后缀,变成php.ini (如图) 打开php.ini ,添加php扩展目录723行左右(其实放哪都无所谓,只不过php. ...
- windows下配置lamp环境(0)---软件获取
工作快一年了,还没有怎么配置过服务器环境,经常使用集成套件wampserver,为了复习配置wamp服务器 特意在虚拟机中测试安装步骤如下. 安装前步骤:下载软件.软件下载地址如下: 1.apache ...
- windows下配置lamp环境(2)---配置Apache服务器2.2.25
配置Apache 配置Apache时,先要找到安装目录中的主配置文httpd.conf,使用文本编辑器打开,最好不要使用windows自带的编辑器,可以使用NotePad++, vim,或者subli ...
- windows下配置svn的https访问
svn是一个功能强大的代码版本管理系统,可以将服务端安装在linux.unix以及windows下.svn通常采用http方式进行代码提交与下载.由于密码采用明文传输,因此存在泄密的风险.若采用htt ...
- windows下配置lamp环境(1)---安装Apache服务器2.2.25
window下lamp成为wamp; 安装wamp环境的第一步是安装Apache服务器.下面开始安装步骤图文并茂. 一.双击安装包点“next”进行下一步,然后同意协议(这张图没有截):
随机推荐
- 🔥🔥Java开发者的Python快速进修指南:控制之if-else和循环技巧
简单介绍 在我们今天的学习中,让我们简要了解一下Python的控制流程.考虑到我们作为有着丰富Java开发经验的程序员,我们将跳过一些基础概念,如变量和数据类型.如果遇到不熟悉的内容,可以随时查阅文档 ...
- 快速下载vscode、git
在官网下载vscode太慢,解决方式: http://vscode.cdn.azure.cn/stable/ea3859d4ba2f3e577a159bc91e3074c5d85c0523/VSCod ...
- C/C++ 实现动态资源文件释放
当我们开发Windows应用程序时,通常会涉及到使用资源(Resource)的情况.资源可以包括图标.位图.字符串等,它们以二进制形式嵌入到可执行文件中.在某些情况下,我们可能需要从可执行文件中提取自 ...
- 分布式文件系统HDFS简介
HDFS实现目标: 兼容廉价的硬件设备 支持大数据集 实现流数据读写 支持简单的文件模型 强大的跨平台兼容性 自身的局限性: 不适合低延迟的数据访问 无法高效储存大量小文件 ...
- UI自动化测试框架:数据驱动
一.UI自动化框架介绍 测试框架使用了Po设计模式(Page Object),每一个页面用一个类来对应,这个类里面要实现所有核心页面元素的获取方法,类里面提供操作页面元素的所有方法. 这个框架实现几点 ...
- 如何用python脚本制作生成CANdbc
最近在工作中,有同事拿了一个excel的dbc表格,在用官方的dbc工具一个一个创建信号,大概看了一下共累计20多个节点,300多个信号,居然在手动处理,顿感无语.. 于是在网络上搜相关的dbc 通过 ...
- 11 个步骤完美排查Linux服务器是否被入侵
文章来源公众号:LemonSec 随着开源产品的越来越盛行,作为一个Linux运维工程师,能够清晰地鉴别异常机器是否已经被入侵了显得至关重要,个人结合自己的工作经历,整理了几种常见的机器被黑情况供参考 ...
- 在 Walrus 上轻松集成 OpenTofu
OpenTofu 是什么? OpenTofu 是一个开源的基础设施即代码(IaC)框架,被提出作为 Terraform 的替代方案,并由 Linux 基金会管理.OpenTofu 的问世为应对 Has ...
- windows server 2019 IIS网站属性上没有asp.net标签 ,aspnet_regiis -i 不能安装用命令解决
用如下命令安装: dism /online /enable-feature /featurename:IIS-ASPNET45 /all
- JavaFx 打包jar(六)
JavaFx 打包jar(六) JavaFX 从入门入门到入土系列 我们编写了不少javafx,那么如何打包成jar给用户呢?下面我给出比较全的打包方式. 打包jar 下面我给出比较全的打包方式. 1 ...