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)