ccls是从cquery派生出来的一个款C++的LSP Server。本文讲述如何在Windows下编译它。注意,所用Window版本为Win10。

ccls和cquery不同的地方在于,ccls是基于libLLVM的,而cquery是基于libclang的,所以ccls可以从C/C++源文件中解析出更多信息,但是导致它依赖于libLLVM,使得编译过程更加复杂。

官方编译教程在:https://github.com/MaskRay/ccls/wiki/Build

本文假设64位编译。

准备工作

安装带有libLLVM的Clang/LLVM

可以从 Building-Zig-on-Windows下载使用MSVC编译的7.0.0版本的Clang/LLVM包。之后解压缩到目录C:/Program Files/llvm+clang-7.0.0-win64-msvc-release

注意,因为下载的Clang/LLVM是用MSVC编译的,所以也必须用MSVC来编译ccls

安装Visual Studio

可以安装Visual Studio 2017的Community版本或者Express版本。

编译需要用到Visual Studio的命令行,可以用下面的方式开启:

  • 对于Visual Studio Community,在开始菜单里面打开x64 Native Tools Command Prompt for VS 2017
  • 对于Visual Studio Express,因为其工具链是32位的,菜单里面的x64 Native Tools Command Prompt for VS 2017会出错,需要使用x86_x64 Cross Tools Command Prompt for VS 2017,或者在cmd.exe里面执行C:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\VC\Auxiliary\Build\vcvarsall.bat x86_amd64

在命令行中输入cl,会输出以下信息

Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27026.1 for x64

确保最后是for x64的。

安装相关的库

编译需要用到ncurse和jq等第三方库,可以从msys2获取。

安装msys2好之后(安装路径在C:/msys64/mingw64/),在打开的命令行中输入以下命令:

pacman -S mingw-w64-x86_64-jq mingw-w64-x86_64-ncurses

cmake和ninja

安装cmake和ninja,确保这两者的路径在环境变量PATH中。

可以用chocolatey或者scoop来安装这两个程序

编译过程

按照上面介绍的方法打开Visual Studio的命令行,用git从ccls将源代码克隆下来,然后执行以下命令:

# 进到ccls源代码目录
cd ccls

mkdir build
cd build

# 生成编译文件
cmake ..  -DCMAKE_BUILD_TYPE=Release -DSYSTEM_CLANG=ON -DCMAKE_CXX_STANDARD=17  -G "Ninja" -DCMAKE_PREFIX_PATH="C:/llvm+clang-7.0.0-win64-msvc-release/;C:/msys64/mingw64/"  -DCMAKE_CXX_COMPILER="C:/llvm+clang-7.0.0-win64-msvc-release/bin/clang-cl.exe"

# 执行编译
cmake --build .

一些注解:

  • -DCMAKE_CXX_STANDARD=17,开启C++17标准
  • -DCMAKE_BUILD_TYPE=Release,编译Release版本,否则链接不过
  • -DSYSTEM_CLANG=ON,采用系统中的clang,而不是去下载
  • -G “Ninja”, 生成Ninja的构建文件
  • -DCMAKE_PREFIX_PATH=“C:/llvm+clang-7.0.0-win64-msvc-release/;C:/msys64/mingw64/",指定CMake的搜索路径,需要添加Clang/LLVM和Msys的库,注意路径中的目录要用\分割,不同的路径用;分割。
  • -DCMAKE_CXX_COMPILER=“C:/llvm+clang-7.0.0-win64-msvc-release/bin/clang-cl.exe”,使用clang-cl作为编译器。

大功告成!

其他参考

(完)

2019-11-25更新

https://github.com/ziglang/zig/wiki/Building-Zig-on-Windows下载

  • llvm+clang-9.0.0-win64-msvc-mt.tar.xz (417 MiB) (sha256 660ceaec19740b0fda8dea028bb609edb9a4fd4cd3fc435b383fa8e4e7926db5)

使用MSVC静态编译,打开x64 Native Tools Command Prompt for VS 2019:

cmake -H. -BRelease -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="C:\llvm+clang-9.0.0-win64-msvc-mt" -DCMAKE_CXX_FLAGS_RELEASE="/MT"

ninja -C Release

(更新完)