就这个问题而言,通过条件变量赋值我的意思是?=
运算符和标准赋值我的意思是:=
运算符。为什么条件变量赋值会设置一个值,但标准赋值不会?
我想通过将它分配给一个变量来检查命令是否存在,然后使用ifdef
来检查它,但是我看到了不同的行为,这取决于我用来执行初始分配的两个运算符中的哪一个。
这是一个蒸馏的Makefile示例。请注意,我的系统上不存在foo
和bar
,因此我希望这两种检查都会触发“未找到”分支。
FOO := $(shell which foo)
BAR ?= $(shell which bar)
all:
ifdef FOO
echo "FOO found with value '${FOO}'"
else
echo "FOO not found"
endif
ifdef BAR
echo "BAR found with value '${BAR}'"
else
echo "BAR not found"
endif
当我运行make
,我得到这样的结果:
FOO not found
BAR found with value ''
的GNU make documentation说ifdef
寻找一个非空值。
为什么这两个赋值运算符在行为和它们产生的不同?
这是伟大的。感谢您的解释。我认为我只遇到过简单的扩展变量,之前这就是为什么这种行为让我困惑。 –