Прямой ответ на ваш первый вопрос - да, вы должны использовать отдельную целевую строку для каждой целевой переменной и устанавливать их по одному.
Ответ на ваш второй вопрос - да: один описан uzsolt.Это был бы мой рекомендуемый метод.Одно из различий между решением uzsolt и решением для целевой переменной является то, что переменные для конкретной цели наследуются предварительными условиями .Кажется, вам здесь не нужно такое поведение, но если бы вы это сделали, то это решение не сработало бы для вас.
Если вам нужны переменные, специфичные для цели, или если одна строка на присвоение переменной все еще слишком болезненна (дляНапример, у вас их очень много, и вы действительно хотите иметь по одной строке на группу), могут быть варианты, которые сложнее понять, но которые проще использовать позже.
Например, если вы знаете, что ни одна иззначения вашей переменной будут содержать пробелы, тогда вы можете создать пользовательский макрос, который использует eval для установки переменных, специфичных для цели, например:
assign-vars = $(foreach A,$2,$(eval $1: $A))
$(call assign-vars, dev_deploy, env=devenv image=abc tag=1.0.4-dev)
$(call assign-vars, prod_deploy, env=prod image=abc tag=1.0.3-prod)
Примечание: первый аргумент - цель, каждое назначение должно бытьодно слово (без встроенного пробела) и запятых между присваиваниями нет.