Определите переменные в одном правиле сборки и используйте его в других правилах сборки - PullRequest
0 голосов
/ 18 декабря 2018

Установкой является Makefile со следующим содержимым (вдохновленный ответом https://stackoverflow.com/a/20714468/185475):

prerule: VALUE = Hello
prerule: 
    @echo "in prerule"
    @echo ${VALUE}

record: prerule
    @echo "in record"
    @echo ${VALUE}

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

$ make record 
in prerule
Hello
in record

$

В качестве вывода я хотел бы получить следующее:

$ make record 
in prerule
Hello
in record
Hello
$

1 Ответ

0 голосов
/ 18 декабря 2018

Вы можете добавить:

$(eval VALUE := $(VALUE))

к рецепту prerule, но имейте в виду, что он установит переменную VALUE глобально, как только рецепт prerule будет выполнен.Не только для контекста правила record.

Демо:

$ cat Makefile
prerule: VALUE = Hello
prerule: 
    @echo "VALUE = $(VALUE) in $@"
    $(eval VALUE := $(VALUE))

record: prerule
    @echo "VALUE = $(VALUE) in $@"

foobar: 
    @echo "VALUE = $(VALUE) in $@"
$ make foobar
VALUE =  in foobar
$ make foobar record
VALUE =  in foobar
VALUE = Hello in prerule
VALUE = Hello in record
$ make record foobar
VALUE = Hello in prerule
VALUE = Hello in foobar
VALUE = Hello in record
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...