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(空であっても が定義されていることに注意してください。)

編集:訂正 -私は間違っていましたifndef; true変数が定義されているが、値が空の場合に返されます。ただしFOOPATH、値が割り当てられる方法が原因で、記述どおりには機能しません。

FOOPATH = $(shell which foo)

の値FOOPATHは文字通り「$(shell which foo)」であるため、ifndefが true と評価されることはなく、エラーが表示されることはありません。解決策は、単純に展開された変数を使用することです:

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

また、ではなく変数ifndefに適用する必要があります(例: not )。FOOPATH$(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 に答える