Как назначить вывод команды оболочки переменной Makefile для всех целей make? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть случайная строка, которая генерируется и используется для нескольких целей создания.Мой Makefile выглядит следующим образом:

VALUE := $(shell strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n')

target_0:
  echo ${VALUE}
  $(MAKE) target_1

target_1:
  echo ${VALUE}

Я бы хотел, чтобы VALUE был одинаковым для всех целей (установите его один раз и обратитесь к его значению во всем файле), но с моей текущей реализацией я получаюследующее (значения разные):

K29p6whTYtrNIrzkaNkF75qtc2YQEq
hcXH00hzYMRa36hp55wBKCRH0YfJvp

Как установить VALUE в верхней части Makefile, чтобы он оценивался и устанавливался только один раз для всех целей, а не каждый раз, когда цельназывается?

1 Ответ

1 голос
/ 15 мая 2019

$(MAKE) target_1 - это рекурсивный вызов make, совершенно новый make процесс, который читает Makefile сверху.

Если вы действительно хотите это сделать, вы можете передать VALUE=${VALUE} рекурсивному марку, и он будет иметь приоритет над заданием :=,

        $(MAKE) target_1 VALUE=${VALUE}

В качестве альтернативы рекурсии вы можете использовать зависимости для вызова одного правила за другим,

target_0: target_1
         ...
...