web-dev-qa-db-fra.com

Comment utiliser CMAKE_EXPORT_COMPILE_COMMANDS?

J'ai essayé d'utiliser clang-modernize avec CMAKE_EXPORT_COMPILE_COMMANDS comme recommandé dans l'aide de cet outil.

Avec cette option, cmake génère un fichier JSON contenant des informations de compilation comme les chemins d'inclusion ( voir aussi ).

Cette variable est acceptée sur la ligne de commande de cmake, mais cmake --help-variable CMAKE_EXPORT_COMPILE_COMMANDS ne fonctionne pas (ce qui est cohérent avec cette publication sur la liste de diffusion ).

Quelqu'un a-t-il une idée de comment l'utiliser?

Je pourrais aussi l'utiliser avec cppcheck.

Quelques informations supplémentaires

J'ai découvert sur un forum des développeurs de clang que cette fonctionnalité cmake n'est pas disponible sur tous les générateurs. Cela pourrait changer à l'avenir, dans l'intervalle, ma question demeure et j'essaierai également de voir ce qui se passera si j'utilise d'autres générateurs que Visual Studio.

25
dzada

Je suggère de mettre

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

dans le CMakeList.txt

30
Jörn Reimerdes

Depuis CMake 3.5, l'option CMAKE_EXPORT_COMPILE_COMMANDS Est prise en charge par les générateurs Ninja et Makefiles .

Cela signifie que pour générer une base de données de compilation JSON, il faut sélectionner un générateur qui la prend en charge.

Par exemple sous UNIX:

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 /path/to/src

(car il utilise le générateur de makefile là-bas, par défaut)

Sinon, vous pouvez spécifier explicitement un générateur comme celui-ci:

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 /path/to/src -G Ninja

Ou:

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 /path/to/src -G 'Unix Makefiles'

Ou une autre variante de makefiles prise en charge par votre cmake - une liste des générateurs pris en charge est incluse dans la sortie de cmake --help.

Notez que le fichier JSON de la base de données de compilation est généré au moment de l'exécution de cmake - pas au moment de la compilation. De plus, avec les versions récentes de clang (par exemple clang >= 3.8), clang-modernize A été fusionné dans clang-tidy.

19
maxschlepzig

Moi aussi, je n'ai pas pu travailler sur le générateur Visual Studio. Il a cependant fonctionné en utilisant le générateur "NMake Makefiles".

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