https://www.jianshu.com/p/cfe6c4b11d75
https://www.sunofbeach.net/a/1290427013433171968
https://bbs.pediy.com/thread-258370.htm
安装准备:
(a) 安装 visual studio 2017 community 版本
注:一开始使用 VS 2019 community 版本,结果编译的时候出现找不到 “atlbase.h" 文件问题;改为 VS 2017 没有此问题。
安装 VS 时选择桌面 C++, VC for ATL 要勾上;
(b) 安装 python3 版本
(c) 安装 cmake 版本;
(d) 下载 ninjia 程序,放到 cmake.exe 所在目录;
(e) 安装 perl https://strawberryperl.com
(f) 安装 getgnuwin32-0.6.3 https://sourceforge.net/projects/getgnuwin32/files/latest/download, 下载解压后,执行目录中的 download.bat 下载文件;
源码准备:
(1) 下载 llvm 源码,从 https://releases.llvm.org 网站上下载源码压缩包;压缩包来自于github,国内访问奇慢;
可以选择从清华的llvm mirror下载:https://mirrors.tuna.tsinghua.edu.cn/help/llvm-project.git/, 整个代码仓库大概1.3GB 左右,国内访问还是比github 快很多。
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project.git
(2) 切换源码到指定版本,比如10.0
cd llvm-project
git checkout origin/release/10.x
(3) 编译代码
首先创建个build目录,然后在build目录内执行 vcvarsall.bat 文件,注意末尾的 x64。然后使用 cmake 创建编译文件。
mkdir build
cd build
E:\llvm\llvm-project\build>"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;clang-tools-extra;libunwind;compiler-rt" -DLLVM_ENABLE_ASSERTIONS=ON ..\llvm
ninja
cmake 会输出很多warning信息,不影响编译,结束后执行 ninja 就开始编译了。
修复常量中有换行符错误:这是因为 VC 识别UTF8 代码有问题。
将文件编码改为utf-8-BOM, 使用 Notepad++ 打开文件,选择“编码”->"转换为UTF8-8 BOM 编码“。
E:\llvm\llvm-project\clang-tools-extra\clangd\Diagnostics.cpp(491): error C2001: 常量中有换行符
E:\llvm\llvm-project\clang-tools-extra\clangd\Hover.cpp(578): error C2001: 常量中有换行符
E:\llvm\llvm-project\clang-tools-extra\clangd\CodeComplete.h(81): error C2001: 常量中有换行符
目前就发现这三个文件需要转下编码,然后编译很长时间后,就编译成功了。bin目录下有输出的内容,如下:
E:\llvm\llvm-project\build\bin 的目录
2021/05/14 14:01 <DIR> .
2021/05/14 14:01 <DIR> ..
2021/05/13 13:08 21,593,600 arcmt-test.exe
2021/05/13 13:08 381 arcmt-test.exe.manifest
2021/05/14 13:52 62,813,696 bugpoint.exe
2021/05/14 13:52 381 bugpoint.exe.manifest
2021/05/14 13:56 1