Makefile: передать переменную из функции в цель make - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть следующая структура папок в моем проекте:

my-app:
    apps:
        app1:
            file1
        app2:
            file2
    Makefile

, и я хочу, чтобы в моем файле Makefile l oop проходил через все папки в apps и выполнял некоторые действия, также предоставляя имя папки в команду. Тем не менее, я не могу передать имя папки в качестве переменной цели make.

Это то, что у меня есть:

.PHONY: clean sandbox build

APPS=apps

define make_all
    for file in $(wildcard ${APPS}/*); do \
        make APP_NAME=$(file) $(1) || exit 1; \
    done
endef

clean:
    rm -rf node_modules
    $(call make_all,clean_one)

clean_one:
    rm -rf build
    echo ${APP_NAME}

Вывод I получить при выполнении make clean следующее:

rm -rf node_modules
for file in apps/app1 apps/app2; do make APP_NAME= clean_one || exit 1; done
make[1]: Entering directory 'my-app'
rm -rf build
echo 

make[1]: Entering directory 'my-app'

Возможно ли то, что мне нужно сделать, как-нибудь возможно?

1 Ответ

0 голосов
/ 20 февраля 2020

В этом случае file является переменной for l oop, вызываемой из Makefile, а не самой переменной Makefile. Вот почему вы должны экранировать $, используя $$.

VAR_LIST = aaa bbb ccc ddd

all: b a

a:
        for var in ${VAR_LIST} ; do echo ${var}; done

b:
        for var in ${VAR_LIST} ; do echo $${var}; done

Цель a потерпит неудачу, поскольку в Makefile.

отсутствует переменная var. Цель b будет работать нормально, потому что мы будем использовать ${var}, который определен внутри for l oop.

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