所以我在这里有一个类似于
的makefileALL_FILES=$(shell find . -name '*')
install : $(ALL_FILES)
$(INSTALL_LOCATION)/%.sh : %.sh ; /bin/usr/install -D $^ $@
$(INSTALL_LCOATION)/% : % ; /usr/bin/install -D $^ $@
$(INSTALL_LOCATION)/dir1/% : dir1/% ; /usr/bin/install -D $^ $@
我的问题是,第二次安装显然是第一个的超集, 但我想第一个先跑,所以第二个被忽略。 然而,第二个也不是第三个的完整超集吗?
那么如何选择使用哪个规则?它选择最具特色的规则吗?
答案 0 :(得分:2)
取决于make的版本。例如,在3.82之前的GNU make中,它将按照它们被声明的顺序搜索模式,并且只使用匹配的第一个模式,而不管其特殊性。在3.82及更高版本中,无论声明顺序如何,GNU make都使用最具体的规则。这是一个简单的例子:
all: sub/foo.x
%.x:
@echo "Prefer first match (stem is $*)."
sub/%.x:
@echo "Prefer most specific match (stem is $*)."
将输出与gmake 3.81和gmake 3.82进行比较:
$ gmake-3.81
Prefer first match (stem is sub/foo).
$ gmake-3.82
Prefer most specific match (stem is foo).