是否可以将 Clang libtooling 与其他编译器一起使用?

Is it possible to use Clang libtooling with other compilers?

我们有一个针对多种平台的产品。其中一些平台的编译使用的是 MSVC 而不是 clang。

我们正在使用 clang libtooling 接口,我们在其中提供了一个 compile_commands.json 文件来指示如何编译每个翻译单元。 clang 如何使用提供的 compile_commands.json 信息?它是否使用所有标志,但 运行 通过它自己的编译器?是否可以将 libtooling 与具有 MSVC 编译说明的 compile_commands.json 一起使用?我们针对每个平台的 compile_commands.json 是由我们的内部构建系统创建的,类似于 cmake 生成它的方式。

Does it use all the flags, but run it through its own compiler?

是的,它 运行 的词法和语法分析就像您直接使用所有这些标志执行 clang 一样。

Is it possible to use libtooling with a compile_commands.json having instructions on MSVS compilation?

当 运行 为 clang-cl.exe 或传递 --driver-mode=cl 标志时,Clang 可以模仿 MSVC cl.exe。因此,如果您的命令行包含 cl.exe 样式标志(如 /MD/Z7),理论上也应该可以使用 libtooling。