2014-04-07 112 views
0

即使文件夹中已有$(HDAIMG)文件,我的配方$(HDAIMG)也始终处理完毕。 我在做什么错?始终处理Makefile规则

HDAIMG  := $(TESTDIR)/$(PROJECT)-hda.img 

HDAIMG值,实际上,是检验/项目hda.img

PHONY: $(PROJECT) 

all: $(PROJECT) $(HDAIMG) 

$(PROJECT): check-env 
    $(call v_exec, 1, $(MAKE) -C $(SRCDIR) [email protected]) 

$(HDAIMG): $(PROJECT) check-env 
    $(call print_white_init, HDAIMG) 
    $(call print, Creating [email protected]) 
    $(call v_exec, 2, dd if=/dev/zero [email protected] count=0 bs=1 seek=$(HDAIMGSIZE) &> /dev/null) 
    $(call print, Partitioning [email protected]) 
    $(call v_exec, 2, parted --script [email protected] mklabel msdos mkpart primary ext4 1 100%) 
    $(call print, Creating [email protected] device maps) 
    $(call v_exec, 2, sudo kpartx -a [email protected] -s) 
    $(call v_exec, 2, sudo mkfs.ext4 /dev/mapper/loop0p1 -q) 
    $(call v_exec, 2, sudo mount /dev/mapper/loop0p1 $(TESTDIR)/mnt) 
    $(call v_exec, 2, sudo umount $(TESTDIR)/mnt) 
    $(call v_exec, 2, sudo kpartx -d [email protected]) 
    $(call print_white_done, HDAIMG) 

check-env: 
ifneq ($(ERROR),) 
    $(call print_error, $(ERROR)) 
    exit 1 
endif 

即调用的函数使用具有彩色打印或具有详细选用来执行;在我的Makeconfig.mk中已经包含了。一些:

v_exec  = $(V$(strip $(1)))$(strip $(2)) 
print  = @echo -e '$(LEAD_SUB_STR) $(strip $(1))' 
print_white_init= @echo -e '$(subst PATTERN,$(strip $(1)),$(WHITE_INIT)) $(strip $(2))' 
print_white_done= @echo -e '$(subst PATTERN,$(strip $(1)),$(WHITE_DONE)) $(strip $(2))' 

回答

3

$(HDAIMG)具有check-env为前提,让一直认为,check-env必须重建,因为check-env实际上不是一个存在的文件。因此决定$(HDAIMG)必须重建。

将检查作为规则中的第一条命令执行会更有意义,而不是作为先决条件。

+0

Beta,你说得对。非常感谢你。 –

+0

@geyslan请接受这个答案,如果它帮助你解决你的问题。 – Chnossos