具有用于单次调用的多个目标的 Makefile 规则

标签 makefile target

根据gnu make documentation , 如果一个规则通过一次调用生成多个目标(例如,一个配方执行一个带有多个输出文件的工具),你可以使用 '&:' 规则语法来告诉 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: warning: overriding recipe for target '&'

Makefile:13: warning: ignoring old recipe for target '&'

为什么 make 提示目标 '&' ?

最佳答案

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

关于具有用于单次调用的多个目标的 Makefile 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60141820/

相关文章:

c - Makefile 从 2 目录构建源代码

c++ - Make 无法找到具有通配符模式的目标

css - 同一个目标过渡两次 (CSS3)

c++ - 使用 cmake 和 Qt4 进行 make 时出现 RCC 解析错误

c - 了解 Makefile 语法

gcc - GCC 中没有 Makefile.am 的 Makefile.in?

c++ - 从现有目标文件创建共享库

javascript - 强制 IFrame 中的任何 HREF 使用其父级作为目标

c++11 - make 没有为 g++ 使用 -std=c++11 选项

jquery - 使用 $this 进行选择