Makefile根据untarred文件制作解除规则

时间:2014-03-21 19:45:58

标签: makefile tar

我们说我有一个tar文件,里面有file1.c和file2.c。现在,我有一个必须解压缩文件的makefile,并构建它们。当然,我无法构建直到untar完成,并且我不想在后续版本中解压缩,除非有人清除.c文件,或者在最后一次成功解压后更新tar文件。最后,如果有人在tar完成之前按下^ C,我需要它在下一个make上再次运行。

所以我有Makefile1:

untar: file.tar.gz
    tar -xzmf $?
    echo > $@

file1.c file2.c : untar

build: file1.c file2.c untar

所以,现在我第一次运行make build。它解压缩(和日期标记)file1和file2,创建untar文件(这只是一个虚拟文件,它让我知道最后一个文件的时间)。如果我然后删除file1.c,它将不会再次解压缩,因为untar文件比file.tar.gz更新。

所以,我们去Makefile2:

untar file1.c file2.c: file.tar.gz
    tar -xzkmf $?
    echo > $@

build: file1.c file2.c untar

我跑make build。它现在将尝试运行tar -xzmf配方三次:一次用于file1,一次用于file2,一次用于untar;这也不好。我也可以创建一个伪目标来执行untar,并使untar,file1和file2依赖它。问题是虚假目标总是在运行,我不想每次都解开。另一个复杂因素是untar文件比file1.c和file2.c更新(因为它在tar完成后更新),这会使依赖关系变得有些复杂。

有人可以建议一个解决这个问题的好方法吗?

0 个答案:

没有答案