GNU Make 实用技巧与特性详解
1. 检测 $(eval) 函数
$(eval) 函数是 GNU make 3.80 版本新增的强大特性。其参数会先被展开,然后当作 makefile 的一部分进行解析,这使得我们可以在运行时修改 makefile。
在使用 $(eval) 时,务必检查读取 makefile 的 GNU make 版本是否支持该特性。可以使用 MAKE_VERSION 检查版本是否为 3.80,也可以使用以下代码,仅在 $(eval) 可用时将 eval_available 设为 T:
$(eval eval_available := T)若 $(eval) 不可用,GNU make 会查找名为 eval eval_available := T 的变量并尝试获取其值,由于该变量不存在,eval_available 会被设为空字符串。
可以结合 ifneq 使用 eval_available,若 $(eval) 未实现则生成致命错误:
ifneq ($(eval_available),T) $(error This makefile only works with a Make program that supports $$(eval)) endif当无法检查 MAKE_VERSION 时,如使用非 GNU make 工具(如 clearmake 或 emake)运行 makefile,eval_availab