ルールが評価される前に特定の条件を強制することは可能ですか?
元:
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が true と評価されることはなく、エラーが表示されることはありません。解決策は、単純に展開された変数を使用することです:
FOOPATH := $(shell which foo) # <-- note the colon
また、値ではなく変数名ifndefに適用する必要があります(例: not )。FOOPATH$(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"