如何使用CMAKE_EXPORT_COMPILE_COMMANDS?

时间:2013-11-18 22:51:52

标签: c++ cmake clang cppcheck

我一直在尝试使用clang-modernizeCMAKE_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会发生什么。

3 个答案:

答案 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  ..