Подтвердить что ты не робот

Можно ли "отключить" переменную среды в Makefile?

Я использую 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 из моего основного файла makefile, чтобы он вообще не присутствовал в среде при вызове библиотеки сторонних разработчиков?

4b9b3361

Ответ 1

Не работает ли для вас следующее?

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

Ответ 2

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

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

Ответ 3

Отменить переменную среды в Linux.

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

export -n MY_ENV_VARIABLE