Clang: использование Cmake для создания compile_commands.json для моего проекта

Я пытаюсь создать файл compile_commands.json, следуя этим инструкциям: http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html

Я не вижу в документах никаких вариантов, позволяющих создать файл compile_commands.json для моего собственного кода. Команда, которую я использую, следуя документу, создает файл json, но содержимое файла содержит файлы/каталоги в исходном каталоге llvm. Я предполагаю, что если этот файл содержит содержимое моего собственного проекта, то при запуске run-clang-tidy.py (из здесь), тогда он будет аккуратно работать с моим собственным проектом.

Итак, вопрос: как мне заставить Cmake собрать compile_commands.json, чтобы он содержал мой собственный проект?


person helloworld95    schedule 19.06.2020    source источник


Ответы (1)


Непонятно, чего именно вы хотите добиться. В предоставленной вами ссылке автор собирает 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 .
person Paw    schedule 26.01.2021