规则之前的Makefile先决条件

时间:2013-10-01 13:44:41

标签: makefile

是否可以在评估规则之前强制执行特定条件?

例如:

FOOPATH = $(shell which foo)
ifndef $(FOOPATH)
    echo "Error: foo is not avaliable."
    # abort make
endif

PS:我没有寻找添加先决条件的解决方案做依赖于foo的每个规则(因为整个Makefile应该依赖于foo)

2 个答案:

答案 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"