Makefile: переменные цели всегда разрешаются - PullRequest
0 голосов
/ 09 мая 2018

Рассмотрим следующее Makefile:

foo: FOOVAR:=$(shell prog_to_execute_only_on_foo)
foo:
    echo "foo"

bar:
    echo "bar"

Я бы хотел иметь возможность запустить make bar без разрешения команды оболочки для FOOVAR.

Возможно ли это?

Если нет, есть ли способ обойти это? чтобы убедиться, что команда оболочки не будет выполнена при запуске make bar?

1 Ответ

0 голосов
/ 09 мая 2018

Этого можно добиться, определив FOOVAR как рекурсивно расширенную переменную вместо просто расширенной переменной (т. Е. Используя вместо нее = из :=):

foo: FOOVAR = $(shell prog_to_execute_only_on_foo)
foo:
    echo "foo"

Таким образом, prog_to_execute_only_on_foo будет выполняться при расширении FOOVAR.

Обратите внимание, однако, что prog_to_execute_only_on_foo будет выполняться каждый раз, когда будет расширяться FOOVAR, тогда как для просто расширенной переменной (т.е. :=) это будет исполняться только один раз .

...