2014-04-10 9 views
0

대상이 디스크 파일의 존재 여부에 따라 달라지는 Makefile을 쓰려고합니다. 디스크 파일 자체는 단순히 만들어야합니다. 그것을 갱신 할 수있는 다른 조치에 의존하지 않습니다. 종속성을주지 않으면 파일을 대상 중 하나에서 실행할 때마다 파일이 다시 만들어집니다.대상이 이미 존재하는지 여부에 대한 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" 

만들기가 사용하지 않는/따옴표가 필요합니다.

"/tmp/disk.img": 

결코 파일이 없습니다 존재, 그래서 규칙은 항상 다시 실행한다 : 따옴표를 포함하여이 파일이

$(TMPDEV): 

그대로입니다 : 현재 대상이 있음을 말하고있다.