Можно ли "сбросить" переменную окружения в Makefile? - PullRequest
19 голосов
/ 03 февраля 2010

Я использую GNU make и включаю стороннюю библиотеку в проект, в котором есть система сборки, которая приходит в бешенство, если CFLAGS определено в среде при ее вызове. Мне нравится определять CFLAGS в моем окружении по другим причинам. Сборка библиотеки вызывается из другого make-файла, так что я говорю, например, :

3rdparty: $(MAKE) -f Makefile.3rdparty

Но я хотел бы быть уверен, что CFLAGS сбрасывается, когда я запускаю make на стороннем Makefile. Ближайшая вещь, которую я могу найти, это сказать:

CFLAGS:=

Но это все равно оставляет CFLAGS установленным в среде, это просто пустая строка. Кроме делать что-то отвратительное, как сказать:

3rdparty: bash -c "unset CFLAGS; $(MAKE) -f Makefile.3rdparty"

Есть ли простой способ "сбросить" переменную CFLAGS из моего основного make-файла, чтобы она вообще не присутствовала в среде при вызове сторонней библиотеки?

Ответы [ 4 ]

25 голосов
/ 03 февраля 2010

Вам не подходит следующее?

unexport CFLAGS
3rdparty:
        $(MAKE) -f Makefile.3rdparty
1 голос
/ 21 февраля 2018

Начиная с версии 3.82, make имеет директиву " undefine ":

undefine CFLAGS 
0 голосов
/ 27 августа 2014

Чтобы сбросить переменную окружения в linux.

Использование:

export -n MY_ENV_VARIABLE
0 голосов
/ 26 июня 2014

Это может быть проблематично, если вам нужно, чтобы переменная была определена для других команд в рецепте, и только если вы не хотите, чтобы она была определена в субмаке. Другое решение заключается в использовании env - для вызова субмаки и явной установки любых переменных среды, которые вам нужно установить в субмаке, например:

env - PATH="$$PATH" LD_LIBRARY_PATH="$$LD_LIBRARY_PATH" $(MAKE) -f Makefile.3rdparty
...