0

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

前任:

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

PS:我不是在寻找添加先决条件的解决方案来执行依赖于 foo 的每个规则(因为整个 Makefile 应该依赖于 foo)

4

2 回答 2

2

FOOPATH = $(shell which foo)

ifeq ($(FOOPATH),)
$(error foo is not available)
endif

(请注意FOOPATH已定义,即使它为空。)

编辑:更正——我错了ifndeftrue如果变量已定义但具有空值,则返回。它不会像写的那样工作,因为FOOPATH分配了一个值的方式:

FOOPATH = $(shell which foo)

的值FOOPATH实际上是“$(shell which foo)”,所以ifndef永远不会评估为真,你也永远不会看到错误。解决方案是使用一个简单的扩展变量

FOOPATH := $(shell which foo)   # <-- note the colon

此外,ifndef应该应用于变量name,而不是它的(例如FOOPATHnot $(FOOPATH))。

ifndef FOOPATH
$(error foo is not available)
endif
于 2013-10-01T13:55:53.307 回答
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"
于 2013-10-01T16:14:49.287 回答