Экспортная переменная для цели в POSIX Make - PullRequest
0 голосов
/ 20 сентября 2018

В GNU Make вы можете экспортировать переменную для цели:

foo: export X=42
foo:
    echo $$X
    # Call several more commands that use $X.

Есть ли способ сделать это в переносимом POSIX Make?Пока я нашел два пути.Первый заключается в том, чтобы объединить все команды в одну:

foo:
    export X=42; \
        echo $$X; \
        # Call several more commands that use $X.

Это плохо, потому что теперь все собрано вместе.Второй - позвонить $(MAKE):

foo:
    $(MAKE) foo_ X=42
foo_:
    echo $$X
    # Call several more commands that use $X.

Но для этого нужно сделать еще один звонок.Есть ли лучший способ?

1 Ответ

0 голосов
/ 20 сентября 2018

Возможно, самое простое решение - установить переменную в командной строке, вызвав make с помощью:

make X=42

Таким образом:

  1. Определена переменная make Xи установите значение 42, даже если для этого файла Makefile установлено другое значение.
  2. Переменная среды оболочки X определена и для всех рецептов установлена ​​равной 42.

ЕслиВы не можете использовать это (например, потому что это make, который вычисляет значение), рекурсивное решение make, вероятно, является лучшим вариантом:

ifeq ($(X),)
X := <some-make-magic>

all:
    $(MAKE) X=$(X) all
else
all:
    <recipe-that-uses-X-environment-variable>
endif
...