2014-04-10 36 views
0

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

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

这是我拥有的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

删除引号:

TMPDEV="/tmp/disk.img" 

制作不使用/需要引号。您是说,这里的目标:

$(TMPDEV): 

是,从字面上看,这个文件包括引号:

"/tmp/disk.img": 

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

相关问题