Makefile объединяет похожие правила

#makefile #gnu-make

#makefile #gnu-make

Вопрос:

У меня в моем makefile есть несколько похожих правил:

 
include .env
include .env.local


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

lt; > $@

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


lt; > $@

var/make:
mkdir $@

Есть ли способ создать общее правило?

 var/make/.env*: name-matching-previous-.env* | var/make
    @sed 's/=/?=/'

lt; > $@

.env* одновременное использование одного файла

Ответ №1:

Да, вы можете написать шаблонное правило:

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

lt; > $@

% Соответствует переменной части целевого имени. (Цель должна заканчиваться на en% , а не env% потому % , что не может соответствовать пустой строке.)