Как использовать CMAKE_EXPORT_COMPILE_COMMANDS?
Я пытаюсь использовать clang-modernize
с CMAKE_EXPORT_COMPILE_COMMANDS
, как рекомендовано при помощи этого инструмента.
С помощью этой опции cmake создает файл JSON, содержащий информацию компиляции, такую как include paths (см. также).
Эта переменная принимается в командной строке cmake,
но cmake --help-variable CMAKE_EXPORT_COMPILE_COMMANDS
не работает (что согласуется с этой рассылкой списка рассылки).
Есть ли у кого-нибудь идеи о том, как его использовать?
Я мог бы также использовать его с cppcheck.
Дополнительная информация
Я обнаружил на форуме разработчиков clang, что эта функция cmake недоступна для всех генераторов. Это может измениться в будущем, в то время как мой вопрос остается, и я попытаюсь также посмотреть, что произойдет, если я буду использовать другие генераторы, кроме Visual Studio.
Ответы
Ответ 1
Как и в CMake 3.5, параметр CMAKE_EXPORT_COMPILE_COMMANDS
поддерживается генераторами Ninja и Makefiles.
Это означает, что для создания базы данных компиляции JSON нужно выбрать генератор, который его поддерживает.
Например, в UNIX:
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 /path/to/src
(поскольку он использует генератор makefile по умолчанию)
В противном случае вы можете явно указать генератор следующим образом:
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 /path/to/src -G Ninja
Или:
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 /path/to/src -G 'Unix Makefiles'
Или другой вариант make файлов, поддерживаемый вашим cmake - список поддерживаемых генераторов включен в вывод cmake --help
.
Обратите внимание, что файл JSON базы данных компиляции создается во время выполнения cmake - не во время компиляции. Кроме того, с последними версиями clang (например, clang >= 3.8
), clang-modernize
был объединен с clang-tidy
.
Ответ 2
Я предлагаю установить
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
в CMakeList.txt
Ответ 3
Мне тоже не удалось работать с генератором Visual Studio.
Однако он работал с использованием генератора "NMake Makefiles".
C:\work\build>cmake -G "NMake Makefiles" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..