makefile - Makefile - $< 用于多个规则
问题描述
根据 gnu make 文档$<
是指第一个先决条件:
$< 第一个先决条件的名称。如果目标从隐式规则中获得其配方,这将是隐式规则添加的第一个先决条件(请参阅隐式规则)。
但是,如果我有以下情况:
a: b
a: c
@echo first prerequisite is: $<
这将打印first prerequisite is c
. 虽然这是有道理的,(因为如果b
被认为是第一个先决条件,它会引发许多尖锐的问题),我没有看到任何支持这一点的文档,我想知道我是否可以依靠它与其他 make 系统保持一致( POSIX 标准似乎也没有对此进行扩展)
解决方案
POSIX 根本不要求它$<
在显式规则中可用,并且某些版本的 make 不使其可用。因此,首先使用它是不可移植的。
从POSIX:
在推理规则中,$< 宏应评估为其存在允许为目标选择推理规则的文件名...... $< 宏的含义应以其他方式未指定。
重点补充。“推理规则”与 GNU make 的隐式规则相同(从技术上讲,它只是后缀规则,因为 POSIX 没有定义模式规则)。
就 GNU make 而言,$<
始终是规则中的第一个先决条件(我的意思是,包含配方的规则)。这绝对是有保证的,我认为 GNU make 手册中应该有文字暗示,但我没有去看。