我一直在尝试使用clang-modernize
与CMAKE_EXPORT_COMPILE_COMMANDS
一起使用此工具的帮助。
使用此选项,cmake会生成一个包含编译信息的JSON文件,例如包含路径(see also)。
此变量在cmake的命令行中被接受,
但cmake --help-variable CMAKE_EXPORT_COMPILE_COMMANDS
不起作用(与this mailing list posting一致)。
有人知道如何使用它吗?
我也可以将它与cppcheck一起使用。
更多信息
我在clang developer forum上发现这个cmake功能并非在所有生成器上都可用。这可能会在将来发生变化,同时我的问题仍然存在,我也会尝试看看如果我使用其他生成器而不是Visual Studio会发生什么。
答案 0 :(得分:23)
我建议设置
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
在CMakeList.txt
中答案 1 :(得分:11)
从CMake 3.5开始,CMAKE_EXPORT_COMPILE_COMMANDS
选项为supported by the Ninja and Makefiles generators。
这意味着要生成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'
或者您的cmake支持的另一个makefile变体 - cmake --help
的输出中包含受支持的生成器列表。
请注意,编译数据库JSON文件是在cmake执行时生成的 - 而不是在编译时生成的。此外,对于最近的clang版本(例如clang >= 3.8
),clang-modernize
已合并到clang-tidy
。
答案 2 :(得分:2)
我也无法在Visual Studio生成器上工作。 但是,它确实使用了“NMake Makefiles”生成器。
C:\work\build>cmake -G "NMake Makefiles" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..