Makefile 难题

问题描述 投票:0回答:0

我的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
。 任何人都可以对此有所了解吗?

makefile
© www.soinside.com 2019 - 2024. All rights reserved.