CMake未生成compile_commands.json文件

30

我刚开始学习 CMake,想要创建 compile_commands.json 文件以便使用 clang,但是我在生成这个文件时遇到了一些困难,不确定原因。我已经能够使用 cmake 编译我下面的二进制 person,但是在编译成功后,我无法输出编译命令。

我也尝试过使用 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 标志,但那也没用。目前没有出现任何错误,也没有输出。

这是我的 CMakeLists.txt 文件:

cmake_minimum_required (VERSION 2.6)
project (Tutorial)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_executable(person Person.cc Pirate.cc main.cc)

你使用的是哪个生成器和CMake版本?我在使用Xcode生成器时无法生成compile_commands.json文件,但对于Ninja和Makefiles,它可以正常工作。 - alaroldai
3个回答

17
这实际上是使用旧版本的CMake出现了问题。我最后安装了最新版本,它像预期的一样工作了。
根据Clang文档,“目前CMake(自2.8.5以来)支持使用选项CMAKE_EXPORT_COMPILE_COMMANDS为Unix Makefile构建(Ninja构建正在进行中)生成编译数据库。”

1
它在哪些版本上失败了,你升级到了什么版本? - Catskul
我没有仔细检查过,但是2.6肯定不行,但是任何>= 3.0的版本似乎都可以正常工作,因此该功能应该是在那个范围内添加的。 - Lucas
4
刚刚在这里找到了确切的答案: http://clang.llvm.org/docs/JSONCompilationDatabase.html “目前,CMake(自2.8.5版本以来)支持使用选项CMAKE_EXPORT_COMPILE_COMMANDS为Unix Makefile构建(Ninja构建正在进行中)生成编译数据库。” - Catskul
感谢您澄清这一点。 - Lucas

10
我也遇到了和你相同的问题。 根据CMake文档

该选项(CMAKE_EXPORT_COMPILE_COMMANDS)只由Makefile生成器和Ninja实现。在其他生成器上将被忽略。

因此,当使用MSVC时无法生成compile_commands.json文件的解决方案。

9
我遇到了同样的问题,使用 cmake 3.16.0 版本时未生成 compile_commands.json 文件。当我使用 Ninja 生成器时,它才生成,而使用 Unix Makefiles 生成器则不会生成。
这个讨论给出了解决方法:
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # does not produce the json file
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "") # works

CMakeLists.txt中,您应该使用$ENV{}语法来检查/访问环境变量,例如CMAKE_*。https://stackoverflow.com/a/68724763/717355 - Philip Oakley
它也是一个普通的变量:https://cmake.org/cmake/help/latest/variable/CMAKE_EXPORT_COMPILE_COMMANDS.html - Jens A. Koch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接