Makefile: выполнение многострочной функции не работает - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть Makefile с несколькими обычными целями. Makefile должен загрузить другой makefile.include и включить его перед целями exec. Я пытался сделать это, как показано ниже. Но это не работает.

define get_file =
@echo "test echo" ;\
if [ -a ./Makefile.include ] ; \
then  \
    echo "Makefile.include present" ; \
else \
    curl -o Makefile.include https://www.blah.com/myfile ;\
fi;
endef

D := $(value get_file)

include Makefile.include

Я пытался выполнить функцию get_file различными способами, она просто не работает. Единственный способ заставить его работать - это поместить функцию в другой файл foo.sh и выполнить следующее:

D := $(shell bash -x foo.sh)

, но я бы предпочел сохранить скрипт в том же файле. Любая помощь приветствуется.

1 Ответ

1 голос
/ 07 ноября 2019

Я думаю, что у вас есть несколько небольших проблем:

define get_file
echo "the parameter is: $1 - this could be the filename passed in"
if [ -a ./Makefile.include ] ; then \
    echo "Makefile.include present"; \
else \
    curl -o Makefile.include https://www.blah.com/myfile; \
fi
endef

Если многострочным определениям не всегда требуется \ в конце, тогда нужны только отдельные многострочные команды (например, оператор if),Также я думаю, что вам нужно использовать call, а не value команду make - так, например, используйте подобное (я добавил пример, где вы можете передать параметр - который вам может не понадобиться / не нужен):

var := $(call get_file,some_parameter)

some_rule:
    @echo $(var)
...