webkit生成clang索引
今天开始接触一个新的项目(基于webkit),第一步自然是搭建源码开发环境。
整个项目通过CMake组织,默认是生成VS工程,再用VS打开sln工程进行构建。这一步OK。
为了生成compile_command.json,执行以下命令:
cmake -G Ninja -S . -B build-for-index -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
配置setting.json, 但发现部分代码无法正确索引:

错误信息如下:
IncludeCleaner: Failed to get an entry for resolved path : no such file or directory
没啥头绪,看了compile_command.json发现用的是cl.exe,心想是不是应该用clang-cl.exe,但使用-T ClangCL是不行的:
cmake -G Ninja -S . -B build-for-index -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -T ClangCL
-- Using toolchain: D:/work/webkit/cmake/toolchains/msvc_x64_windows.cmake
-- MSVC runtime library: 'MultiThreadedDLL'
CMake Error at CMakeLists.txt:18 (project):
Generator
Ninja
does not support toolset specification, but toolset
ClangCL
was specified.
-- Configuring incomplete, errors occurred!
正确的方式应该如下:
cmake -G Ninja -S . -B build-for-index -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl
REM 以下方式并无效果
REM set CC=clang-cl && set CXX=clang-cl
如此生成的json文件用的就是clang-cl.exe。注意这些文件都在
C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\Llvm\x64\bin
没必要自己去下载clangd等。
如此之后,发现索引还是错的,继续看ouput/clangd的日志,把相关命令copy到文件并执行(命令太长,无法Paste到命令行中):
$ D:\work\webkit\build-for-index>call build-test.bat
....
platform\\graphics\\cpu\\arm" "-ID:\\work\\webkit\\Source\\WebCore\\platform\\graphics\\cpu\\arm\\filters" "-ID:\\work\\webkit\\Source\\WebCore\\platform\\graphics\\displaylists" "-ID:\\work\\webkit\\Source\\WebC
ore\\platform\\graphics\\filters" "-ID:\\work\\webkit\\Source\\WebCore\\platform\\graphics\
error: unable to read PCH file D:/work/webkit/build-for-index/Source/WebCore/WebCore_SOURCES/WebCorePrefix.pch: 'no such file or directory'
fatal error: PCH file 'D:/work/webkit/build-for-index/Source/WebCore/WebCore_SOURCES/WebCorePrefix.pch' not found: module file not found
2 errors generated.
这个错误就很明显了,应该是构建脚本生成的WTF头文件路径写死了build目录,因此找不到,只需要全局替换下json文件中的这个路径即可。
替换完成后,索引就正常了。