Как использовать 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  ..