ルールが評価される前に特定の条件を強制することは可能ですか?
元:
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"