Makefile 在规则的配方部分使用%(通配符百分比)

Makefile 在规则的配方部分使用%(通配符百分比),makefile,wildcard,gnu-make,Makefile,Wildcard,Gnu Make,我想这样做: PHONY += bar bar: $(MAKE) foo_$@ PHONY += foo_% foo_%: cp somedir/%.a someotherdir/ .PHONY: $(PHONY) 但是%没有在配方(cp部分)中进行评估 我的解决方法是创建一个与我要使用的文件同名的假目标,但我更喜欢一个更好的解决方案: PHONY += bar bar: $(MAKE) foo_$@ PHONY += foo_% foo_%: %.a @

我想这样做:

PHONY += bar
bar:
    $(MAKE) foo_$@

PHONY += foo_%
foo_%:
    cp somedir/%.a someotherdir/

.PHONY: $(PHONY)
但是
%
没有在配方(cp部分)中进行评估

我的解决方法是创建一个与我要使用的文件同名的假目标,但我更喜欢一个更好的解决方案:

PHONY += bar
bar:
    $(MAKE) foo_$@

PHONY += foo_%
foo_%: %.a
    @:

PHONY += %.a
%.a:
    cp somedir/$@ someotherdir/

.PHONY: $(PHONY)

有没有办法将扩展的
%
传递给shell命令?

您正在寻找吗?是的,我正在寻找!不确定设置
假变量的目标是什么,但如果您认为它会使添加到其中的目标变得假。。。不会的。关于文件末尾名为
PHONY
@madcasciient的变量,我没有什么特别要说明的。PHONY:$(PHONY)
。我要加上这句话。把程序和库变成虚假目标(至少)是不寻常的。我不确定事情是否会按照你认为的方式进行。