在此makefile中,为什么总是要重新构建目标“ bunzip2 / data2.tar”的先决条件?

SO臭

我有一个make文件,尽管前提条件是最新的,但它总是重新运行规则:

data.tar.bz2: data.tar
    bzip2 --keep data.tar

#The following rule always runs the rule for its prerequisite even if it is up-to-date. Note that it doesn't matter whether regardless whether the bunzip2 directory exists or not. I suppose is has something to do with the dir/file naming of the rule but I haven't been able to decipher why.
bunzip2/data2.tar: data.tar.bz2
    mkdir bunzip2 && cd bunzip2 && bzip2 -ckd ../data.tar.bz2 > data2.tar && cd ..

.PHONY: clean
clean:
    rm -f data.tar.bz2
    rm -Rf bunzip2

任何想法表示赞赏。

疯狂的科学家

在文件上设置时间戳的标准POSIX系统调用不支持亚秒精度。为了使这些工具在文件上设置特定的时间(他们试图这样做,以使压缩文件具有与原始文件相同的时间戳)并保留使用不同系统调用所需的原始精度;显然他们没有这样做。

要解决此问题,您可以做的就是更改您的规则,如下所示:

data.tar.bz2: data.tar
        bzip2 --keep data.tar && touch $@

以便将目标的时间戳设置为“现在”。

ETA用于在文件上设置修改时间的传统系统调用是utime(),它仅以一秒为增量接受时间戳。较新版本的POSIX规范引入了utimensat(),它允许设置纳秒级的时间戳。还有一种utimes()允许微秒级的精确度,但长期以来一直被认为是“传统”。

如果当前最新版本的中存在此行为bzip2,我认为这是一个值得向他们报告错误的错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在哪里可以找到bunzip(不是bunzip2)?

在一条规则中结合2个模式先决条件?

bunzip2到另一个目录

makefile:先决条件$(变量)中的%模式

Makefile 先决条件中的变量分配

一个 liquibase 变更集中的 2 个先决条件

Azure B2C 先决条件和检查空字符串

为什么先决条件的顺序在 makefile 中很重要?

关于自动生成Makefile先决条件

makefile 不扩展动态先决条件

规则之前的Makefile先决条件

makefile 目标比先决条件更新,但会重新完成

Makefiles:什么是仅订购先决条件?

如何在 Makefile 目标中重复相同的先决条件?

Makefile 仅识别更改的先决条件,而不识别新的先决条件

当Data1中的变量名与Data2中的Column1的值相同时,用Data2中的Column2的值替换data1中的变量名

Makefile先决条件列表中的分号是什么?

如何设置Makefile目标取决于模式先决条件?

Makefile:将PHONY目标声明为配方先决条件

具有非语音先决条件的Makefile .PHONY目标

具有动态先决条件的动态 Makefile 目标

Makefile,先决条件自动变量中的替代路径

为什么要在先决条件之前运行食谱?

文件目标是否是 PHONY 目标的先决条件?

Haskell中无点功能的先决条件是什么

对目标的先决条件下达命令

makefile:: *** 先决条件不能在配方中定义。停止

Makefile:如果不存在则忽略先决条件

尝试学习spring或struts框架的先决条件是什么?