ifeq($(foo),)和ifndef foo之间有什么区别?

时间:2014-12-03 00:58:43

标签: makefile gnu-make

根据this link,似乎这两种情况都会被评估为相同的结果,那么它们之间有什么区别呢?

ifeq ($(foo),)
    execute somethings
endif

ifndef foo
   execute somethings
endif

1 个答案:

答案 0 :(得分:3)

ifdef / ifndef不扩展变量。

显示不同行为的示例:

bar =
foo = $(bar)

ifndef foo
$(info yes)
else
$(info no)
endif

ifeq ($(foo),)
$(info yes)
else
$(info no)
endif

输出:

no
yes

第一个看到值“$(bar)”并失败。第二个扩展了foo中的变量,因此变为“”并且它会通过。