首页 > 解决方案 > 具有多个目标的 Makefile 规则,用于单次调用

问题描述

根据gnu make 文档,如果规则通过一次调用生成多个目标(例如,使用配方执行具有多个输出文件的工具),您可以使用 '&:' 规则语法来告诉 make。我在使用此语法时收到关于目标“&”的警告,但是,当在多个规则中有多个(但唯一)目标时。好像将 & 符号弄错了目标名称,而不是作为目标先决条件分隔符的一部分。

在我的原始项目中,我有两个具有多个目标的规则和一个从单个语句/工具生成这些目标的配方。两个规则中的每一个的目标都是唯一的。我创建了以下简单示例来演示 make 生成的警告:

all: file_abbc

.PHONY: all clean

clean:
    del /Q file_*

file_abbc: file_ab file_bc
    copy file_ab+file_bc file_abbc

file_ab file_bc &: file_a file_b file_c
    copy file_a+file_b file_ab
    copy file_b+file_c file_bc

file_a file_b file_c &: content
    copy content file_a
    copy content file_b
    copy content file_c

在上面的 Windows 上运行 make 的警告:

Makefile:17:警告:覆盖目标“&”的配方

Makefile:13:警告:忽略目标“&”的旧配方

为什么抱怨目标'&'?

标签: makefiletarget

解决方案


您使用的是不理解&:规则的旧版本 GNU make,因此仅将&其视为文件名。用于make --version查看您正在运行的版本,如果它比 4.3 旧,则升级


推荐阅读