【问题标题】:Makefile Target Dependency on Whether Target Already ExistsMakefile 目标依赖于目标是否已经存在
【发布时间】:2014-04-11 01:51:32
【问题描述】:

我正在尝试编写一个 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

【问题讨论】:

    标签: makefile dependencies diskimage


    【解决方案1】:

    去掉引号:

    TMPDEV="/tmp/disk.img"
    

    Make 不使用/不需要引号。你是说这里的目标:

    $(TMPDEV):
    

    从字面上看,就是这个包含引号的文件:

    "/tmp/disk.img":
    

    那个文件永远不存在,所以规则总是重新运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 2012-11-30
      • 2013-10-28
      • 2013-07-08
      • 1970-01-01
      相关资源
      最近更新 更多