摆弄一个主要基于纯 Makefiles 的构建系统,我来到了以下宏,以便于测试是否存在,并为构建过程所需的每个外部工具设置一个内部变量。
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))
然而,经验表明,在 makefile 中这样做并不常见,第三方构建系统通常更喜欢外部配置脚本和替代机制。
除了 which(1) 程序在平台上的可用性有限这一事实之外,还有什么强有力的理由不将其放入 Makefile 中?