Makefile: генерировать имя цели ($ @), отличное от параметра ($ <)? - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть Makefile, который генерирует шаблон облачной информации с использованием jinja2 (последняя команда: j2 source-template.j2.yml parameter-file.j2data.yml> final-cloudformation.yml). Он сопоставляет исходный шаблон с соответствующим параметром j2data file и генерирует окончательный файл в render / dev или rendered / prodall. Некоторый код из текущего поколения:

EC2DC_TEMPLATE := templates/ec2dc.j2.yml
EC2DC_DEV_APP := jiraDC
EC2DC_PROD_APP := jiraDC
RENDERED_DIR := templates/rendered

# Main targets
.DEFAULT: build
.PHONY: build release

build: EC2DC_DEV EC2DC_PRODALL 

EC2DC_DEV: $(patsubst %,${RENDERED_DIR}/dev/%-ec2dc.cfn.yml, ${EC2DC_DEV_APP})
EC2DC_PRODALL: $(patsubst %,${RENDERED_DIR}/prodAll/%-ec2dc.cfn.yml, ${EC2DC_PROD_APP})
${RENDERED_DIR}/%-ec2dc.cfn.yml: parameters/%.j2data.yml ${EC2DC_TEMPLATE} | dirs
    @echo Rendering $@ CloudFormation Template
    @j2 ${EC2DC_TEMPLATE} $< > $@


# Create directories
.PHONY: dirs
dirs:
    @echo "Creating directories"
    @mkdir -p templates/rendered/dev templates/rendered/prod templates/rendered/prodAll build

Теперь это дает вывод, как показано ниже (и, как я уже сказал, сгенерированный шаблон облачной информации имеет "тот же" префикс, что и файл параметров) Вывод:

echo "Creating directories:"
echo Rendering templates/rendered/dev/jiraDC-ec2dc.cfn.yml CloudFormation Template
j2 templates/ec2dc.j2.yml parameters/dev/jiraDC.j2data.yml > templates/rendered/dev/jiraDC-ec2dc.cfn.yml
echo Rendering templates/rendered/prodAll/jiraDC-ec2dc.cfn.yml CloudFormation Template
j2 templates/ec2dc.j2.yml parameters/prodAll/jiraDC.j2data.yml > templates/rendered/prodAll/jiraDC-ec2dc.cfn.yml

Вопросы:

1. Я не могу понять, как он сопоставляет соответствующий файл параметров в строке: $ {RENDERED_DIR} /% - ec2d c .cfn.yml : параметры /%. j2data.yml $ {EC2DC_TEMPLATE} | dirs, поскольку мне нужно, чтобы имя файла назначения отличалось от имени файла параметров.

2. Что означает | dirs pipe в приведенной выше команде? Означает ли труба и затем dirs, что она вызывает цель dirs "до" генерации целей?

3. Как выше работает в "для" l oop?

Теперь мне нужно добавить код для выполнения команд j2, где он использует «тот же» файл параметров, что и выше, но окончательное имя шаблона отличается. (Исходный шаблон ie jiraAdmin и целевой шаблон ie jiraAdmin.cfn - имена файлов не важны, но они определенно не могут совпадать с именем файла параметра, так как это поколение файла уже существует в коде) Пример: параметры j2 templates / jiraAdmin.j2.yml /dev/jiraDC.j2data.yml> templates / rendered / dev / jiraAdmin.cfn.yml или j2 templates / jiraAdmin.j2.yml параметры / prodAll / jiraD C .j2data.yml> шаблоны / rendered / prodAll /jiraAdmin.cfn.yml

Пожалуйста, помогите разобраться с этим и указателями (или, если возможно, некоторыми фрагментами), как мне этого добиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...