Makefile目标依赖于目标是否已经存在

时间:2014-04-10 17:49:07

标签: makefile dependencies diskimage

我正在尝试编写一个Makefile,其目标取决于磁盘文件的存在。磁盘文件本身只需要创建;它不依赖于可能更新它的任何其他操作。如果我没有给它任何依赖项,那么每次在其中一个目标上运行make时都会重新创建该文件。

有没有办法让目标取决于它是否存在?

这是我拥有的Makefile的一部分。只有$(TMPDEV)文件不存在才需要创建,否则应该认为它是最新的。

TMPDEV="/tmp/disk.img"

$(TMPDEV):
        fallocate -l 806354944 $(TMPDEV) || dd if=/dev/zero of=$(TMPDEV) bs=1b count=1574912
        sudo parted --script $(TMPDEV) unit s mklabel msdos \
          mkpart primary fat16 2048 526335 \
          mkpart primary fat32 526336 1050623 \
          mkpart primary NTFS 1050624 1574911 \
          quit
        $(eval TMPDISK := $(shell sudo partx --verbose -a $(TMPDEV) | tail -1 | cut -d':' -f1))
        sudo mkfs.fat -F 16 -n FAT16 $(TMPDISK)p1
        sudo mkfs.fat -F 32 -n FAT32 $(TMPDISK)p2
        sudo mkfs.ntfs -L NTFS $(TMPDISK)p3
        sudo partx -d $(TMPDISK)
        sudo losetup -d $(TMPDISK)

testresults: $(TMPDEV)
        touch testresults

analytics: $(TMPDEV)
        touch analytics

1 个答案:

答案 0 :(得分:1)

删除引号:

TMPDEV="/tmp/disk.img"

不要使用/需要报价。你在这里说的目标是:

$(TMPDEV):
字面上,

是这个文件,包括引号:

"/tmp/disk.img":

该文件永远不存在,因此规则始终重新运行。