Как использовать CMAKE_EXPORT_COMPILE_COMMANDS?

Я пытался использовать clang-modernize с CMAKE_EXPORT_COMPILE_COMMANDS как рекомендуется в помощи этого инструмента.

С этой опцией cmake генерирует JSON-файл, содержащий информацию о компиляции, такую ​​как include-пути (смотрите также).

Эта переменная принимается в командной строке cmake,
но cmake --help-variable CMAKE_EXPORT_COMPILE_COMMANDS не работает (что согласуется с этот список рассылки).

Есть ли у кого-нибудь идеи о том, как его использовать?

Я мог бы также использовать это с cppcheck.

Еще немного информации

Я обнаружил на форум разработчиков Clang что эта функция cmake доступна не на всех генераторах. Это может измениться в будущем, в то же время мой вопрос останется, и я постараюсь посмотреть, что произойдет, если я использую другие генераторы, кроме Visual Studio.

13

Решение

Я предлагаю установку

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

в CMakeList.txt

15

Другие решения

Начиная с 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'

Или другой вариант makefiles, который поддерживает ваш cmake — список поддерживаемых генераторов включен в вывод cmake --help,

Обратите внимание, что файл JSON базы данных компиляции создается во время выполнения cmake, а не во время компиляции. Кроме того, с последними версиями Clang (например, Clang >= 3.8), clang-modernize был объединен в clang-tidy,

7

Я тоже не смог заставить работать генератор Visual Studio.
Однако он работал с использованием генератора «NMake Makefiles».

C:\work\build>cmake -G "NMake Makefiles"  -DCMAKE_EXPORT_COMPILE_COMMANDS=ON  ..
2