在Makefile中测试外部工具的首选方法

时间:2013-08-05 23:13:36

标签: makefile gnu-make

摆弄主要基于纯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))

然而,经验表明,在makefile中这样做并不常见,第三方构建系统通常更喜欢外部配置脚本和替代机制。

除了哪个(1)程序在平台上具有有限的可用性这一事实外,有没有强烈的理由不在Makefile中这样做?

1 个答案:

答案 0 :(得分:0)

我不完全确定明确检查该工具是否与您的系统一样可用;如果你的路径中不存在该程序,那么它将失败并显示“未找到命令”错误,这是非常明确的,那么为什么要浪费时间明确地检查它呢?

另一方面,检查图书馆的存在,我觉得确实增加了价值。如果缺少某个库,您可能只会找到一个“未找到文件”,并且没有指示它来自哪个库,但即便如此,有关如何配置构建环境的明确文档也将是更好;实际上要说“这就是你需要构建它”,而不是尝试处理奇怪配置系统的所有边缘情况。

请注意,我的观点在这方面非常激进;如果某人没有机智阅读README或BUILDING说明并适当地设置他们的环境,那么他们可能没有任何企业愿意在第一时间建立它......一个不那么愤世嫉俗的人大自然可能想采取更柔和的方式:)