首页 > 解决方案 > Makefile - $< 用于多个规则

问题描述

根据 gnu make 文档$<是指第一个先决条件:

$< 第一个先决条件的名称。如果目标从隐式规则中获得其配方,这将是隐式规则添加的第一个先决条件(请参阅隐式规则)。

但是,如果我有以下情况:

a: b
a: c
    @echo first prerequisite is: $<

这将打印first prerequisite is c. 虽然这是有道理的,(因为如果b被认为是第一个先决条件,它会引发许多尖锐的问题),我没有看到任何支持这一点的文档,我想知道我是否可以依靠它与其他 make 系统保持一致( POSIX 标准似乎也没有对此进行扩展)

标签: makefilegnu-make

解决方案


POSIX 根本不要求它$<在显式规则中可用,并且某些版本的 make 不使其可用。因此,首先使用它是不可移植的。

从POSIX:

在推理规则中,$< 宏应评估为其存在允许为目标选择推理规则的文件名...... $< 宏的含义应以其他方式未指定。

重点补充。“推理规则”与 GNU make 的隐式规则相同(从技术上讲,它只是后缀规则,因为 POSIX 没有定义模式规则)。

就 GNU make 而言,$<始终是规则中的第一个先决条件(我的意思是,包含配方的规则)。这绝对是有保证的,我认为 GNU make 手册中应该有文字暗示,但我没有去看。


推荐阅读