【问题标题】:[CMAKE]: Can't remove the .d and .gcno files generated by cmake using make clean command[CMAKE]:无法删除 cmake 使用 make clean 命令生成的 .d 和 .gcno 文件
【发布时间】:2019-02-08 10:15:21
【问题描述】:

我正在使用 cmake 构建我的项目。我能够在 linux 平台上生成 Makefile,因此也能够构建项目。

但是,当我想清理所有生成的文件时,我无法这样做。 我无法使用make clean 命令删除foo.c.gcnofoo.c.d 类型的文件。

cmake 中是否有任何特定命令可以删除这些中间文件?

注意:我有不同的 Cmake-source 和 build 目录。我担心构建目录中生成的文件(*.c.gcno 和 *.d)。通过 make clean 命令清除所有其他文件(如 *.o 和 *.so)。

【问题讨论】:

  • 不确定.gcno 文件,但.d 文件包含依赖项,它们应该被CMake 正确处理(即在make clean 上被删除)。展示您的项目(以minimal reproducible example 的形式)。
  • 需要更多信息,例如:你是什么意思你不能删除它们? - 你的意思是make clean 没有删除它们还是你的意思是它由于某种原因(比如权限)而无法删除它们?什么错误(如果有的话)?可能您只需要将文件类型添加到清理列表中。我们需要更多信息,因为@Tsyvarev 提到示例代码总是有用的:) 注意.gcno 文件由 gnu 覆盖 (gcov) 编译选项生成(以防其他人徘徊)。
  • 是的,'make clean' 不会删除那些(*.gcno 和 *.d)文件。我在执行 make clean 时没有收到任何错误,但是这些文件没有被删除,但是这些文件是在构建文件期间生成的。无论如何,我认为解决方案是在 CMakeLists.txt 添加自定义目标 distclean 。 cmake.org/pipermail/cmake/2003-June/003953.html

标签: makefile cmake


【解决方案1】:

在 CMake 中,您不能生成 Makefile 并删除其余部分。构建项目仍需要所有生成的文件和已安装的 CMake。

您应该首先在不同的目录中运行cmake <source directory>。我们称之为构建目录。

然后,可以在不更改源代码的情况下完全删除构建目录。

【讨论】:

    最近更新 更多