【问题标题】:Why -DCMAKE_EXPORT_COMPILE_COMMANDS does not create compile_commands.json file为什么 -DCMAKE_EXPORT_COMPILE_COMMANDS 不创建 compile_commands.json 文件
【发布时间】:2015-03-19 15:03:48
【问题描述】:

我的cmake --version2.8.12.2

我使用以下命令配置我的项目构建:

cmake ../klein/ -DBUILD_KLEIN_DEPS=1 -DCMAKE_EXPORT_COMPILE_COMMANDS=1
cmake ../klein/ -DBUILD_KLEIN_DEPS=1 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
cmake ../klein/ -DBUILD_KLEIN_DEPS=1 -DCMAKE_EXPORT_COMPILE_COMMANDS=on
CMAKE_EXPORT_COMPILE_COMMANDS=1 cmake ../klein/ -DBUILD_KLEIN_DEPS=1 

来自一个干净的构建,以及一个具有现有成功构建的目录。又想看compiler_commands.json文件,但是没有出现。

应该在什么时候创建它:在cmake 之后,还是在make 命令之后?它应该在./../klein 目录中的什么位置?我的cmake 没有说明这个选项,但它总是抱怨未使用的构建变量。

它应该在“脏”目录中工作,我已经在其中成功执行了一次构建,还是只在空文件夹中重新运行时工作?

编辑: 我在我的 ubuntu linux 机器上使用默认生成器“Unix Makefiles”

编辑2: 我不是该问题下项目的作者(我只想使用需要 compile_commands.json 文件的rtags 来探索它),而且我对 CMake 机制也不是很熟悉。但是,CMakeLists.txt 可能被配置为超级构建(它确实下载并构建依赖项 - 像 llvm、z3、...),它包括 ExternalProject,但它也从源代码构建项目本身(klein)。正如我所说,这是一个混合体。

【问题讨论】:

  • 乍一看,试试 -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON 类型说明符很重要。
  • 嗯。现在它抱怨无用:CMake Warning: Manually-specified variables were not used by the project: CMAKE_EXPORT_COMPILE_COMMANDS
  • 嗯,听起来很奇怪,我觉得这就是进步。我对 CMAKE_EXPORT_COMPILE_COMMANDS 的了解还不够,还没有建议您如何在内部使用它。如果它与生成器相关,您可以考虑以下线程。 stackoverflow.com/questions/20059670/…

标签: cmake clang


【解决方案1】:

您能指定您使用的生成器吗?对 3.1.0 版本的 cmake 源的快速扫描表明该命令仍然仅在以下 2 种情况下可用。

if(CMAKE_GENERATOR MATCHES "Unix Makefiles")

if(CMAKE_GENERATOR MATCHES "Ninja")

如果您直接使用 Visual Studio,除非您想向 CMake 添加补丁,否则您会很不走运。否则,我知道许多 Windows 开发人员都曾使用过 Ninja。一个优点是它的构建速度比 Visual Studio 快得多。如果您实际上是在使用 Ninja 或 Unix Makefiles,那么值得深入挖掘。

【讨论】:

  • 我使用 Unix Makefiles,得到一堆 makefiles 作为cmake 的输出。正如提到的线程中所建议的,我也尝试过 Ninja 生成器 - 我有一个 Ninja make 文件,但没有 compiler_commands.json 的痕迹
  • 好的,谢谢,那么我想这值得深入研究。我会问周围的工作,看看是否有人对这个命令有更深入的了解。这不是我以前用过的。也许其他人会在我们等待时插话。
  • 对于初学者,在您的原始帖子中,您说您使用命令 make .... 等 .. 我猜您的意思是 cmake,对吗?因此,要回答您的其他初始问题 1)它应该在干净或脏树上工作(错误总是让我开始干净以保持理智) 2)它将在 cmake 命令之后、make 之前生成该文件。最后一个问题要问你。您的项目是超级构建,即使用 ExternalProject 吗?当我配置我的超级构建时,我也没有得到 json 文件。
  • 感谢您的关注,@StAlphonzo,我已修复(make->cmake)。该项目确实似乎是超级构建,因为它下载并构建依赖项,但它也编译源代码。我已经更新了问题
  • 嗯,非常有趣的问题。我有一个 externalProject 仅构建下载/构建第三方库但不添加自己的库。在该项目上运行 cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ../src/ 不会产生 compile_commands.json。例如,如果我添加一个 add_library(foo foo.c),我会在根构建目录中获取 json。我认为看到你的项目 CMake 会很好(如果可能的话)我只能想象那里出了点问题。也许一个显示失败的非常简单的例子是最简单的。
猜你喜欢
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 2023-04-05
  • 2021-05-11
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多