C++ 如何使用CMAKE\u EXPORT\u COMPILE\u命令?

C++ 如何使用CMAKE\u EXPORT\u COMPILE\u命令?,c++,cmake,clang,cppcheck,C++,Cmake,Clang,Cppcheck,我一直在尝试使用clangmodernize和CMAKE\u EXPORT\u COMPILE\u命令,这是在这个工具的帮助下推荐的 使用此选项,cmake生成一个JSON文件,其中包含编译信息,如include path() 在cmake的命令行上接受此变量, 但是cmake--help变量cmake\u EXPORT\u COMPILE\u命令不起作用(这与一致) 有人知道如何使用它吗 我也可以将它与cppcheck一起使用 更多信息 我在上发现,并非所有生成器都具有此cmake功能。这在将

我一直在尝试使用
clangmodernize
CMAKE\u EXPORT\u COMPILE\u命令,这是在这个工具的帮助下推荐的

使用此选项,cmake生成一个JSON文件,其中包含编译信息,如include path()

在cmake的命令行上接受此变量, 但是
cmake--help变量cmake\u EXPORT\u COMPILE\u命令
不起作用(这与一致)

有人知道如何使用它吗

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

更多信息


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

我也无法使用Visual Studio生成器。 但是,它确实使用了“nmakeMakefiles”生成器

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

从CMake 3.5开始,
CMake\u EXPORT\u COMPILE\u命令
选项被禁用

这意味着要生成JSON编译数据库,必须选择支持它的生成器

例如,在UNIX上:

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 /path/to/src
(默认情况下,它使用makefile生成器)

否则,您可以像下面这样显式指定生成器:

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

或者您的cmake支持的另一个makefiles变体—支持的生成器列表包含在
cmake--help
的输出中

请注意,编译数据库JSON文件是在cmake执行时生成的,而不是在编译时生成的。此外,在最近的clang版本中(例如clang
=3.8
),我建议将
clang modernize
合并到
clang tidy

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

在节目后期的CMakeList.txt

中,但对于那些也在谷歌上搜索的人来说,这永远不会起作用——它必须在调用cmake之前设置。但是,第二次调用cmake会看到它工作。@HörmannHH感谢您提到这一点。正是在第一次生成compile_commands.json时,我遇到了这个问题,只是在第二次配置之后才生成。继续搜索时,我发现了这个问题。如果我把它放在我的
project()
规范之后,我就能够在CMakeLists.txt中实现它。在@Marnix链接的(现已关闭)问题中,这个问题的另一个原因来自CMake覆盖变量,即使在设置变量之前调用了
project()
。这是为了解决这个问题;对于较旧的版本,可以通过将
set()
命令修改为
set(缓存内部“”上的CMAKE\u EXPORT\u COMPILE\u命令)来实现一种变通方法。自Cmake 3.15.5起:
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)