我一直在尝试使用clang-modernize
与CMAKE_EXPORT_COMPILE_COMMANDS
的建议,在这个工具的帮助。
使用此选项,cmake会生成一个JSON文件,其中包含编译信息,如include路径(see also)。
这个变量在cmake的命令行上是可以接受的,但是cmake --help-variable CMAKE_EXPORT_COMPILE_COMMANDS
不起作用(这与this mailing list posting一致)。
有人知道怎么用吗?
我也可以用它与cppcheck。
更多信息
我在一个clang developer forum上发现这个cmake特性并不是在所有的生成器上都可用。这在将来可能会改变,同时我的问题仍然存在,我也会尝试看看如果我使用Visual Studio之外的其他生成器会发生什么。
4条答案
按热度按时间mzsu5hc01#
我建议设置
在CMakeList.txt文件中
cdmah0mi2#
在CMake 3.5中,
CMAKE_EXPORT_COMPILE_COMMANDS
选项是supported by the Ninja and Makefiles generators。这意味着要生成JSON编译数据库,必须选择支持它的生成器。
例如,在UNIX上:
(as默认情况下,它使用生成文件生成器)
否则,您可以显式指定生成器,如下所示:
或者:
或者cmake支持的另一个makefile变体-
cmake --help
的输出中包含一个受支持的生成器列表。请注意,编译数据库JSON文件是在cmake执行时生成的,而不是在编译时。此外,在最近的clang版本(例如clang
>= 3.8
)中,clang-modernize
被合并到clang-tidy
中。l2osamch3#
我也不能在VisualStudio生成器上工作,但是,它使用“NMake Makefile”生成器工作。
cgvd09ve4#
第一个是在CMakelists.txt中使用CMAKE_EXPORT_COMPILE_COMMANDS ON,或者使用以下参数运行CMake:
1.Option:
下面是一个简单的源代码和构建树,让大家明白.
main.cpp
CMakeLists.txt:
cars/CMakeLists.txt
目标链接目录允许main.cpp在不提供相对路径的情况下包含cars. h文件。您应该在project()定义之后使用set(CMAKE_EXPORT_COMPILE_COMMANDS ON),因为有时其他工具会覆盖此设置,这就是为什么您看不到compile_commands. json。