【问题标题】:GNU make: How to modify a file without re-executing rules?GNU make:如何在不重新执行规则的情况下修改文件?
【发布时间】:2023-04-02 06:07:01
【问题描述】:

假设我想对文件进行非常小的(即注释、空白清理等)更改,但我不希望 Make 经历耗时(>24 小时)的重建过程。有没有办法做到这一点?

我知道您可以使用“触摸”来做相反的事情(即在不编辑文件的情况下重建),但这在这里并没有真正的帮助。

【问题讨论】:

    标签: c++ build makefile dependencies


    【解决方案1】:

    编辑文件后,您可以将“修改时间”更改为您想要的任何内容

    touch -m -r filename
    

    其中filename 是包含您要复制的时间的文件的名称(构建中另一个未触及的文件)。见http://www.computerhope.com/unix/utouch.htm

    【讨论】:

      【解决方案2】:

      你也可以用touch 做相反的事情。我很容易做到的一种方法是:

       $ cp -a foo.c foo.c.bak
       $ <fix up foo.c>
       $ touch foo.c -r foo.c.bak
      

      因为cp -a 应该保留修改时间戳。另一种类似的方法是记下修改时间戳(例如stat -c "%y" foo.c 或类似的东西)并使用touch-m-t 参数而不是复制文件。

      【讨论】:

      • 看起来你和我想出了几乎相同的解决方案。我将不得不投票给这个“有用”...
      • 这似乎可以工作,尽管我目前不在 Linux 机器上测试它。 PS我也经常在Windows上使用gnu make ...有人知道最简单的Windows解决方案吗?我看到的所有 Win touch 替代品都显得冗长/骇人/不雅。
      【解决方案3】:

      触摸仍然是您只需向后使用它的答案。

      1. 复制文件(保留修改时间,-p)。
      2. 编辑原始文件。
      3. 使用触摸重置修改/等。时间回到之前的状态(touch -r file.copy 文件)。

      这应该足以做你想做的事了。

      请记住,您可以随时询问 make -q,看看它是否认为需要做任何工作来确保您做对了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-21
        • 1970-01-01
        • 2011-04-03
        • 2013-04-23
        • 2018-12-28
        • 1970-01-01
        • 2014-02-02
        相关资源
        最近更新 更多