具有用于单次调用的多个目标的 Makefile 规则
Makefile rule with multiple targets for single invocation
根据 gnu make documentation,如果一个规则通过一次调用生成多个目标(例如,一个配方执行一个带有多个输出文件的工具),您可以使用“&:”规则语法来告诉做。
但是,当在多个规则中有多个(但唯一的)目标时,我在使用此语法时收到有关目标“&”的警告。就好像把目标名称的符号弄错了,而不是目标先决条件分隔符的一部分。
在我的原始项目中,我有两个具有多个目标的规则和 一个从单个 statement/tool 生成这些目标的方法。两个规则中的每一个的目标都是唯一的。我创建了以下简单示例来演示 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 的警告:
Makefile:17: warning: overriding recipe for target '&'
Makefile:13: warning: ignoring old recipe for target '&'
为什么 make 抱怨目标“&”?
您使用的是不理解 &:
规则的旧版本 GNU make,因此仅将 &
视为文件名。使用 make --version
查看您的版本 运行 并升级,如果它比 4.3
更旧
根据 gnu make documentation,如果一个规则通过一次调用生成多个目标(例如,一个配方执行一个带有多个输出文件的工具),您可以使用“&:”规则语法来告诉做。 但是,当在多个规则中有多个(但唯一的)目标时,我在使用此语法时收到有关目标“&”的警告。就好像把目标名称的符号弄错了,而不是目标先决条件分隔符的一部分。
在我的原始项目中,我有两个具有多个目标的规则和 一个从单个 statement/tool 生成这些目标的方法。两个规则中的每一个的目标都是唯一的。我创建了以下简单示例来演示 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 的警告:
Makefile:17: warning: overriding recipe for target '&'
Makefile:13: warning: ignoring old recipe for target '&'
为什么 make 抱怨目标“&”?
您使用的是不理解 &:
规则的旧版本 GNU make,因此仅将 &
视为文件名。使用 make --version
查看您的版本 运行 并升级,如果它比 4.3