0

我正在尝试按照以下说明创建 compile_commands.json 文件:http: //clang.llvm.org/docs/HowToSetupToolingForLLVM.html

我在文档上看不到任何允许针对我自己的代码构建 compile_commands.json 文件的选项。我在关注 doc 时使用的命令构建 json 文件,但文件的内容包含 llvm 源目录中的文件/目录。我假设如果这个文件包含我自己项目的内容,那么当我运行 run-clang-tidy.py (从这里),那么它将针对我自己的项目运行 clang-tidy。

所以问题是:如何让 Cmake 构建 compile_commands.json 以包含我自己的项目?

4

1 回答 1

0

目前尚不清楚您想要实现什么。在您提供的链接中,作者正在从源代码构建 LLVM,这就是编译数据库 ( compile_commands.json) 引用这些源的原因。

通常,要在使用 CMake 构建源代码树时构建编译数据库,您需要为其提供-DCMAKE_EXPORT_COMPILE_COMMANDS=ON标志。

因此,您链接的博客文章在哪里调用

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON path/to/llvm/sources

...您可以为自己的源代码树交换源代码的路径:

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON this/is/my/source/tree/path

...应该在当前(构建)目录中生成 json 文件。如文章中所述,您可能希望将该文件符号链接到源代码树的根目录,然后从那里运行您的工具。

这是我编写并有时使用的(非常)简单的构建脚本。也许它对你有帮助(显然适应你自己的需要)。它应该从源代码树的根目录运行。

#!/usr/bin/env sh

type=Debug
if ! [[ -z "$1" ]]; then
  type="$1"
  mkdir -p build/$type
  shift
fi

# Configure build
cmake -S . -B build/$type -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=$type .

# Build
cmake --build build/$type --parallel 4 --config $type "$@"

ln -fs build/$type/compile_commands.json .
于 2021-01-26T10:42:12.043 回答