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

Makefile ifeq($(foo),)和ifndef foo之间有什么区别,makefile,gnu-make,Makefile,Gnu Make,根据,这两种情况的评估结果似乎相同,那么它们之间有什么区别呢 ifeq ($(foo),) execute somethings endif 及 ifdef/ifndef不展开变量 显示不同行为的示例: bar = foo = $(bar) ifndef foo $(info yes) else $(info no) endif ifeq ($(foo),) $(info yes) else $(info no) endif 输出: no yes 第一个看到值“$(bar)”并

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

ifeq ($(foo),)
    execute somethings
endif


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中的变量,使其变为“”并通过。

引用手册:“注意,ifdef只测试变量是否有值。它不会扩展变量以查看该值是否为非空。”注意,
ifndefo…
ifeq(,$(value foo))…
非常类似。当
--warn undefined variables
生效时,双方都不会抱怨。
no
yes