Сделать дополнительный перевод строки в обязательном порядке в определенном рецепте - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь создать Makefile, который использует рецепт, созданный с использованием синтаксиса define.Однако я столкнулся с проблемой, когда Make считает, что к последнему предварительному условию добавлена ​​новая строка, что приводит к ошибке «правило не найдено».Ниже приведен минимальный рабочий пример, проблема вызывается попыткой сделать цель foo / bar.

foo:
    mkdir foo

define FIZZ
foo/bar: foo
    touch foo/bar
endef

$(call FIZZ)

Точное сообщение об ошибке:

make: *** No rule to make target 'foo
', needed by 'foo/bar'. Stop.

Я пробовал версии 4.1и 4.2.1 из GNU Make.Может кто-нибудь сказать мне, что я делаю неправильно (или это ошибка)?

1 Ответ

0 голосов
/ 25 октября 2018

Здесь вы пытаетесь развернуть переменную FIZZ, чтобы добавить определение цели foo/bar (ее предпосылки и рецепт) в расширенный make-файл.$(call FIZZ) не является инструментом для этого:

$(call variable,param,param,...)

может вести себя удивительно, если аргументы содержат встроенный пробел.Вы хотите 8,9. Функция eval , например:

Makefile

foo:
    mkdir foo

define FIZZ
foo/bar: foo
    touch foo/bar
endef

$(eval $(FIZZ))

Тогда вы получите:

$ make foo/bar
mkdir foo
touch foo/bar
...