主に純粋な Makefile に基づくビルド システムをいじって、ビルド プロセスで必要な各外部ツールの存在のテストと内部変数の設定を簡単にするために、次のマクロにたどり着きました。
define tool-available
$(eval $(1) := $(shell which $(2)))
$(if $($(1)),$(info $(2) available at $($(1))),$(error error: missing tool $(2)))
endef
$(eval $(call tool-available,DOT,dot))
$(eval $(call tool-available,RBIN,R))
$(eval $(call tool-available,FIND,find))
ただし、サードパーティのビルドシステムは通常、外部の構成スクリプトと代替メカニズムを優先するため、メイクファイル内でこれを行うことは一般的ではないことが経験からわかっています。
which(1) プログラムはプラットフォームでの利用が制限されているという事実以外に、Makefile にそうしない強い理由はありますか?