【问题标题】:CMake not generating compile_commands.jsonCMake 不生成 compile_commands.json
【发布时间】:2014-07-20 13:57:46
【问题描述】:

我是 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 来说它可以正常工作。

标签: c++ json cmake clang


【解决方案1】:

这最终成为使用旧版本 CMake 的问题。我最终安装了最新版本,它按预期工作。

根据 Clang 文档

“目前 CMake(自 2.8.5 起)支持使用 CMAKE_EXPORT_COMPILE_COMMANDS 选项为 Unix Makefile 构建(Ninja 构建中)生成编译数据库。”

【讨论】:

  • 在哪些版本上失败了,您升级到了什么版本?
  • 还没有彻底检查过,但 2.6 肯定没有工作,但任何 >= 3.0 似乎都可以正常工作,因此该功能被添加到该范围内的某个位置。
  • 刚刚在这里找到了确切的答案:clang.llvm.org/docs/JSONCompilationDatabase.html“目前 CMake(自 2.8.5 起)支持使用 CMAKE_EXPORT_COMPILE_COMMANDS 选项为 Unix Makefile 构建(Ninja 构建中)生成编译数据库。”
  • 感谢您澄清这一点。
【解决方案2】:

我遇到了同样的问题,compile_commands.json 不是用 cmake 生成的,版本 3.16.0。 它是在我使用Ninja 生成器时生成的,但不是Unix Makefiles

discussion 给了我解决方法:

set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # does not produce the json file
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "") # works

【讨论】:

【解决方案3】:

我也遇到了和你一样的问题。 根据CMake doc

此选项 (CMAKE_EXPORT_COMPILE_COMMANDS) 仅由 Makefile Generators 和 Ninja 实现。它在其他生成器上被忽略。

因此,没有办法在使用MSVC时生成compile_commands.json文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多