我的makefile尝试了三种不同的调用方式
FileExists
.
第二次尝试,
Try2
,内联调用eval
/call
/FileExist
。但是对于 not 存在的文件,Try2
总是将 CallInline
设置为 1
而它应该是 0
。为什么?
第三次尝试,
Try3
,调用eval
/call
/FileExist
并将结果存储在变量中然后检查该变量。这适用于存在和不存在的文件。
define FileExists
$(and $(wildcard $(1)),1)
endef
define FileCheck
#Try1
$(eval Imm=$(call FileExists,$(1)))
#Try2
$(eval $(if $(call FileExists,$(1)),\
$(eval CallInline:=1),\
$(eval CallInline:=0)))
#Try3
$(eval ExistsVar=$(call FileExists,$(1)))
$(eval $(if $(ExistsVar),\
$(eval FromVar:=1),\
$(eval FromVar:=0)))
@echo $(1) Inline=[$(CallInline)]. Variable=[$(FromVar)]. Immeditate=[$(Imm)]
endef
FC:
$(call FileCheck,./include/NotExist.h)
$(call FileCheck,./include/DoesExist.h)
这里是输出:
#Try1
#Try2
#Try3
./include/NotExist.h Inline=[1]. Variable=[0]. Immeditate=[]
#Try1
#Try2
#Try3
./include/DoesExist.h Inline=[1]. Variable=[1]. Immeditate=[1]
这个
./include/NotExist.h Inline=[1].
应该是0
。
任何人都可以对此有所了解吗?