是否可以在评估规则之前强制执行特定条件?
前任:
FOOPATH = $(shell which foo)
ifndef $(FOOPATH)
echo "Error: foo is not avaliable."
# abort make
endif
PS:我不是在寻找添加先决条件的解决方案来执行依赖于 foo 的每个规则(因为整个 Makefile 应该依赖于 foo)
是否可以在评估规则之前强制执行特定条件?
前任:
FOOPATH = $(shell which foo)
ifndef $(FOOPATH)
echo "Error: foo is not avaliable."
# abort make
endif
PS:我不是在寻找添加先决条件的解决方案来执行依赖于 foo 的每个规则(因为整个 Makefile 应该依赖于 foo)
FOOPATH = $(shell which foo)
ifeq ($(FOOPATH),)
$(error foo is not available)
endif
(请注意FOOPATH
已定义,即使它为空。)
编辑:更正——我错了ifndef
;true
如果变量已定义但具有空值,则返回。但它不会像写的那样工作,因为FOOPATH
分配了一个值的方式:
FOOPATH = $(shell which foo)
的值FOOPATH
实际上是“$(shell which foo)”,所以ifndef
永远不会评估为真,你也永远不会看到错误。解决方案是使用一个简单的扩展变量:
FOOPATH := $(shell which foo) # <-- note the colon
此外,ifndef
应该应用于变量name,而不是它的值(例如FOOPATH
not $(FOOPATH)
)。
ifndef FOOPATH
$(error foo is not available)
endif
有关更多信息,这是我的最终解决方案,@Beta 提供了很多帮助
FOOPATH = $(shell which ls 2>/dev/null)
ifeq ($(FOOPATH),)
$(error foo is not avaliable)
else
$(warning foo is avaliable in $(FOOPATH))
endif
all:
@echo "rule all executed"