43

我一直在尝试按照此工具的帮助中的建议使用clang-modernizewith 。CMAKE_EXPORT_COMPILE_COMMANDS

使用此选项,cmake 会生成一个 JSON 文件,其中包含编译信息,例如包含路径(另请参阅)。

此变量在 cmake 的命令行上被接受,但cmake --help-variable CMAKE_EXPORT_COMPILE_COMMANDS不起作用(与此邮件列表发布一致)。

有人知道如何使用它吗?

我也可以将它与 cppcheck 一起使用。

更多信息

我在一个clang 开发者论坛上发现这个 cmake 功能并非在所有生成器上都可用。这在未来可能会改变,同时我的问题仍然存在,如果我使用 Visual Studio 以外的其他生成器,我也会尝试看看会发生什么。

4

3 回答 3

54

我建议设置

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

在 CMakeList.txt

于 2017-08-20T10:53:01.570 回答
28

从 CMake 3.5 开始,Ninja 和 Makefiles 生成器支持CMAKE_EXPORT_COMPILE_COMMANDS该选项。

这意味着要生成 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.8clang-modernize被合并到clang-tidy.

于 2016-06-26T16:00:58.497 回答
5

我也无法开始使用 Visual Studio 生成器。但是,它确实使用“NMake Makefiles”生成器工作。

C:\work\build>cmake -G "NMake Makefiles"  -DCMAKE_EXPORT_COMPILE_COMMANDS=ON  ..
于 2014-02-03T22:07:17.573 回答