Makefile模式规则没有扩展名?

And*_*zos 24 makefile gnu-make

我有一堆使用相同类型的make规则构建的应用程序:

apps = foo bar baz

all: $(apps)

foo: foo.o $(objects)
    $(link)

bar: bar.o $(objects)
    $(link)

baz: baz.o $(objects)
    $(link)
Run Code Online (Sandbox Code Playgroud)

如果他们有扩展名(例如.x),我可以制定一个模式规则:

%.x: %.o $(objects)
    $(link)
Run Code Online (Sandbox Code Playgroud)

我不必为每个应用程序写出新规则.

但他们没有扩展,我很确定:

%: %.o $(objects)
    $(link)
Run Code Online (Sandbox Code Playgroud)

将无法工作(因为它指定构建任何文件,您可以使用此规则).

反正有没有指定一个涵盖所有$(apps)构建规则的规则?

Bet*_*eta 29

这看起来像静态模式规则的工作:

$(apps) : % : %.o $(objects)
    $(link)
Run Code Online (Sandbox Code Playgroud)


Max*_*kin 8

%: %.o $(objects)
    $(link)
Run Code Online (Sandbox Code Playgroud)

以上应该有效.

您可以通过将规则转换为静态模式规则来限制规则的范围,以便仅考虑您的目标列表:

$(apps) : % : %.o $(objects) # only consider this for $(apps) targets
    $(link)
Run Code Online (Sandbox Code Playgroud)