【问题标题】:Difference Between 'gmake' and 'gmake clean'“gmake”和“gmake clean”之间的区别
【发布时间】:2013-04-02 14:31:43
【问题描述】:

我目前正在从事一个学生工作项目并编写一些代码。每当我想编译我的文件时,我的主管告诉我先做gmake clean,然后再做gmake。否则,以前的 gmake 中的一些错误可能无法在新的 gmake 中解决。

我的项目有很多我没有编辑的不必要的文件,但由于我每次都gmake clean,编译器每次都会重新编译它们,这需要很多时间。

所以,如果我不更改其他文件,那么我不需要重新编译它们,并且我更改的唯一文件总是简单地使用 gmake 重新编译,对吗?那么为什么我每次都要gmake clean呢?

我的主管只是告诉我一个良好的编程习惯还是我错过了gmake clean 的一些重要概念?

【问题讨论】:

  • 这是您的 makefile 实际包含的内容的问题。如果您没有正确设置依赖项,则会遇到问题。
  • 依赖关系,你的意思是'#include'是我正在编辑的文件的任何其他文件?你能澄清一下吗?
  • 我认为如果您发布一个简单的 makefile 示例来演示您实际尝试做的事情,您会得到更好的响应。它不一定要起作用(或者您不会问),只是为了让我们了解您的意图。
  • GNUMake 文件大约有 1100 行大。并包含我不明白的代码。但这就是它在 gmake 时所做的: [调试] 为 file1.cpp 生成依赖项 [调试] 为 file2.cpp 生成依赖项 ... ...(对于 20 个文件类似)...和 ​​[调试] 编译 file1.cpp [调试] 编译file2.cpp ...等20个文件。如果您能告诉我依赖项到底是什么,那就太好了。谢谢。
  • 基本上我只想知道我每次编译包所花费的 10 秒是否值得? gmake 需要 1 秒,而 gmake clean 之后的 gmake 需要 10 秒。如果相关,则在编译过程中不会创建新文件。而且我正在开发一个商业软件,我自己还没有创建这些依赖项等。

标签: bash gnu-make


【解决方案1】:

gmakegmake clean 的区别在于前者构建默认目标,而后者“构建”特定目标 clean,通常包含清理指令以删除在构建过程(目标文件、临时文件、生成的代码……)。 gmake clean 应该将源树恢复到干净的状态。但是,它是否真的成功取决于源代码树的外观以及目标包含哪些指令。

【讨论】:

    【解决方案2】:

    绝对不是最佳实践...当 makefile 包含一些错误并且依赖关系不正常时,这通常是快速而肮脏的解决方案

    【讨论】:

      【解决方案3】:

      gmake 之前执行gmake clean,以防编译时遇到困难。只是为了检查问题是否来自旧的编译文件。

      否则只做gmake 来编译你最新更改的文件。

      你的上级给了你一个处理困难和奇怪的编译行为的建议。

      【讨论】:

        猜你喜欢
        • 2010-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-19
        • 1970-01-01
        • 1970-01-01
        • 2012-07-07
        相关资源
        最近更新 更多