xpi_hash
更新ターゲットのコマンドの実行が決定された場合にのみ、変数を割り当てる必要があります。次に、この変数を環境、エクスポートなどとして使用しています..
ルールの外に置くと、$(xpi)
ターゲットが呼び出される前に最初に展開されるため、そのファイルが見つかりません。
substitute := perl -p -e 's/@([^@]+)@/$$ENV{$$1} bla bla...
export xpi_hash
.PHONY: dirs substitute update
update: $(xpi) $(target_update_rdf)
xpi_hash := $(shell sha1sum $(xpi) | grep -Eow '^[^ ]+')
@echo "Updating..."
$(target_update_rdf): $(update_rdf)
$(substitute) $< > $@
コマンド部分ではシェルが表されているため、上記はもちろん正しくありません。したがって、この質問の別の言い方は、変数をコマンド出力として表示する方法です。