Я пытаюсь установить несколько зависимостей в одном блоке GNU Make define..endef, но мне совсем не везет. Если я урежу проблему до базовой c формы, я нацеливаюсь на окончательный make-файл, который выглядит следующим образом:
all: CPU1 CPU2
CPU1: Build_CPU1
CPU2: Build_CPU2
Build_CPU1:
@echo Building CPU #1
Build_CPU2:
@echo Building CPU #2
Проблема возникает, если я пытаюсь поместить две промежуточные зависимости внутри блок define..endef:
all: CPU1 CPU2
define DoBuild =
CPU1: Build_CPU1
CPU2: Build_CPU2
endef
$(call DoBuild)
Build_CPU1:
@echo Building CPU #1
Build_CPU2:
@echo Building CPU #2
Если после каждой из двух строк: -dependency (то есть «CPU1: Build_CPU1» и «CPU2: Build_CPU2») в define..endef поставить пустую новую строку block, GNU Make жалуется на "*** целевой шаблон не содержит '%'". Но если я добавлю пробел-затем-новую строку после двух зависимостей, это сообщение об ошибке исчезнет.
Однако, следуя двум строкам зависимости с пробелом-затем-новой строкой, GNU Make жалуется на "** * несколько целевых шаблонов. "
Я уверен, что здесь происходит то, что GNU Make объединяет все строки блока define..endef в одну строку: и, конечно, вы можете ' в одной строке должно быть несколько двоеточий.
Согласно руководству GNU Make 6.8 («Определение многострочных переменных»), вы должны иметь возможность принудительно вводить новую строку внутри блока define..endef, используя два переводы строк. Тем не менее, проблема в этом заключается в том, что это в конечном итоге определяет одну переменную, и поэтому анализируется, как если бы это была одна строка, даже если она содержит символы новой строки. Вот почему (я думаю), почему он объединяет две зависимости в одну строку (помещая оба двоеточия в одну строку), так что я в основном не в идеях. : - (
Есть ли способ убедить GNU Make определить две или более целей зависимостей в одном блоке define..endef?
PS: я использую GNU Make 4.2.1