是否可以在评估规则之前强制执行特定条件?
例如:
FOOPATH = $(shell which foo)
ifndef $(FOOPATH)
echo "Error: foo is not avaliable."
# abort make
endif
PS:我没有寻找添加先决条件的解决方案做依赖于foo的每个规则(因为整个Makefile应该依赖于foo)
答案 0 :(得分:2)
FOOPATH = $(外壳foo)
ifeq ($(FOOPATH),)
$(error foo is not available)
endif
(注意 FOOPATH
已定义,即使它是空的。)
编辑:更正 - 我错了ifndef
;如果定义了变量但它具有空值,则返回true
。 但是由于FOOPATH
分配了值的方式,它不会像写的那样工作:
FOOPATH = $(shell which foo)
FOOPATH
的字面意思是" $(外壳foo)",所以ifndef
永远不会评估为真,你永远不会看到错误。解决方案是使用simply expanded variable:
FOOPATH := $(shell which foo) # <-- note the colon
此外,ifndef
应该应用于变量名称,而不应用于值(例如FOOPATH
而不是$(FOOPATH)
)。
ifndef FOOPATH
$(error foo is not available)
endif
答案 1 :(得分:0)
有关详细信息,这是我的最终解决方案,在@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"