Makefile 什么';make中*和%的区别是什么?

Makefile 什么';make中*和%的区别是什么?,makefile,gnu,Makefile,Gnu,根据这些文件,我分不清两者的区别。似乎它们中的任何一个都可以用于先决条件、目标和变量中,以实现相同的结果。引用: $%是 目标为存档成员时的目标成员名称。看见 档案。例如,如果目标是foo.a(bar.o),则“$%”是 bar.o和“$@”是foo.a.$%”当目标不是目标时为空 档案馆成员 $*是 隐式规则与之匹配的词干(请参阅)。 如果目标是dir/a.foo.b且目标模式是a.%.b,则 stem是dir/foo。stem可用于构造相关文档的名称 文件夹。在静态模式规则中,干是文件名的一

根据这些文件,我分不清两者的区别。似乎它们中的任何一个都可以用于先决条件、目标和变量中,以实现相同的结果。

引用:

$%

目标为存档成员时的目标成员名称。看见 档案。例如,如果目标是foo.a(bar.o),则“$%”是 bar.o和“$@”是foo.a.$%”当目标不是目标时为空 档案馆成员

$*

隐式规则与之匹配的词干(请参阅)。 如果目标是dir/a.foo.b且目标模式是a.%.b,则 stem是dir/foo。stem可用于构造相关文档的名称 文件夹。在静态模式规则中,干是文件名的一部分 与目标模式中的“%”匹配的。(手册中有更多详细信息。)

*在目标或先决条件列表中使用时,是一个

%当在目标和先决条件中使用时,是模式通配符或普通通配符

因此,
$*
变量的内容与该规则的目标和先决条件中匹配的百分比相同

处理归档目标时使用
$%
变量


*在目标和先决条件中使用时,文件名是全局的。

因此,在这种情况下:%用于静态模式规则,以便从目标生成先决条件,该先决条件由
$(MP3_文件)
中的
patsubst
调用,该目标可由
make all
调用,正确吗?patsubst将flac文件名转换为mp3文件名。
mp3/%.mp3:flac/%.flac
位是一个普通的模式规则(如果他们愿意,他们可以使用静态模式规则),它表示对于要求您生成的任何与
mp3/%.mp3
模式匹配的文件,其先决文件为
flac/%.flac
运行以下规则。将
$(MP3\u文件)
包含在
all
目标的先决条件列表中意味着
makeall
将尝试构建所有这些MP3文件。因此,如果它是作为静态模式规则编写的,那么同样的事情是否可以在更少的代码中完成?另外,如何使用静态模式规则来编写它?在这种特定情况下不会有太大变化,我可以告诉您,静态模式规则主要只是将模式规则应用程序限制在列出的目标上<代码>$(MP3_文件):MP3/%.MP3:flac/%.flac