Ответ 1
Не работает ли для вас следующее?
unexport CFLAGS
3rdparty:
$(MAKE) -f Makefile.3rdparty
Я использую 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, чтобы он вообще не присутствовал в среде при вызове библиотеки сторонних разработчиков?
Не работает ли для вас следующее?
unexport CFLAGS
3rdparty:
$(MAKE) -f Makefile.3rdparty
Это может быть проблематично, если вам нужна переменная, которая должна быть определена для других команд в рецепте, и только не хотите, чтобы она была определена в подмахе. Другим решением является использование env - для вызова подзадачи и явное определение любых переменных среды, которые вам нужно установить в подмахе, например:
env - PATH="$$PATH" LD_LIBRARY_PATH="$$LD_LIBRARY_PATH" $(MAKE) -f Makefile.3rdparty
Отменить переменную среды в Linux.
Использование:
export -n MY_ENV_VARIABLE