Makefile将相似的规则组合在一起

Makefile将相似的规则组合在一起,makefile,gnu-make,Makefile,Gnu Make,我的makefile中有一些类似的规则: include .env include .env.local var/make/.env: .env | var/make @sed 's/=/?=/' $< > $@ var/make/.env.local: .env.local | var/make @sed 's/=/?=/' $< > $@ var/make: mkdir $@ include.env include.env.loc

我的makefile中有一些类似的规则:


include .env
include .env.local


var/make/.env: .env | var/make
    @sed 's/=/?=/' $< > $@

var/make/.env.local: .env.local | var/make
    @sed 's/=/?=/' $< > $@

var/make:
    mkdir $@

include.env
include.env.local
var/make/.env:.env | var/make
@sed的/=/?=/'$<>$@
var/make/.env.local:.env.local | var/make
@sed的/=/?=/'$<>$@
变量/品牌:
mkdir$@
有没有办法制定一个通用规则

var/make/.env*: name-matching-previous-.env* | var/make
    @sed 's/=/?=/' $< > $@
var/make/.env*:名称与先前的-.env*| var/make匹配
@sed的/=/?=/'$<>$@
.env*一次只作为一个文件

是的,您可以编写:

var/make/.en%:.en%| var/make
@sed的/=/?=/'$<>$@
%
与目标名称的变量部分匹配。(目标必须以
en%
结尾,而不是
env%
,因为
%
不能匹配空字符串。)

var/make/.en%: .en% | var/make
    @sed 's/=/?=/' $< > $@