【发布时间】:2013-12-02 09:30:20
【问题描述】:
根据文档,我无法分辨两者之间的区别。似乎它们中的任何一个都可以在先决条件、目标和变量中使用以达到相同的结果。
【问题讨论】:
根据文档,我无法分辨两者之间的区别。似乎它们中的任何一个都可以在先决条件、目标和变量中使用以达到相同的结果。
【问题讨论】:
引用manual:
$%是
目标成员名称,当目标是存档成员时。看 档案。例如,如果目标是 foo.a(bar.o),那么 ‘$%’ 是 bar.o 和“$@”是 foo.a。当目标不是 存档成员。
$*是
隐式规则匹配的词干(参见How Patterns Match)。 如果目标是 dir/a.foo.b 并且目标模式是 a.%.b 那么 茎是 dir/foo。词干对于构造相关名称很有用 文件。在静态模式规则中,词干是文件名的一部分 匹配目标模式中的“%”。 (手册中有更多详细信息。)
* 在目标或先决条件列表中使用时为file glob wildcard。
% 在目标和先决条件中使用时是static pattern rule 或普通pattern rule 中的模式通配符。
所以$* 变量与该规则的目标和先决条件中匹配的 % 具有相同的内容。
$% 变量用于处理归档目标。
* 在目标和先决条件中使用时是文件名通配符。
【讨论】:
$(MP3_FILES) 中的patsubst 调用,可以调用make all,对吗?
mp3/%.mp3: flac/%.flac 位是一个普通模式规则(如果他们愿意,他们可以使用静态模式规则),它表示您被要求构建的任何文件与 mp3/%.mp3 模式匹配,该模式具有 @ 的先决条件文件987654336@ 运行以下规则。在all 目标的先决条件列表中包含$(MP3_FILES) 意味着make all 将尝试构建所有这些mp3 文件。
$(MP3_FILES): mp3/%.mp3: flac/%.flac