как реализовать переменную общего доступа makefile - PullRequest
1 голос
/ 08 марта 2011

Мне нужна переменная в make-файле, которую можно использовать в make-файлах subdir (стратегия рекурсивной сборки), и, наконец, использовать ее для принятия решения. Раньше я думал, что экспорт - это способ сделать это, но я не получаю желаемых результатов.

следующие мои make-файлы: -

Target.mk      (common include for both Makefile.mk & Subdir.mk)
Makefile.mk
Subdir.mk

ФАЙЛ: Target.mk

export TARGET_PROPERTIES: =


ФАЙЛ: Makefile.mk

-include Target.mk

.PHONY : all 
all :
    $(MAKE) -C $(PWD) -f Subdir.mk all
    @echo "#------------------------------------------------------------#"
    @echo "Target build properties"
    @echo $(TARGET_PROPERTIES)
    @echo "#------------------------------------------------------------#"

ФАЙЛ: Subdir.mk

-include Target.mk

TARGET_PROPERTIES+=alpha
TARGET_PROPERTIES+=beta

$(warning $(TARGET_PROPERTIES))

all:
    @echo "Subdir.mk......[OK]"

ПРОБЛЕМА - Я хочу, чтобы TARGET_PROPERTIES обновлялся с Subdir.mk и использовал результаты в Makefile.mk

мой вывод следующий

$ make -f Makefile.mk
make -C /cygdrive/c/make_pf -f Subdir.mk all
make[1]: Entering directory `/cygdrive/c/make_pf'
Subdir.mk:8:  alpha beta
Subdir.mk......[OK]
make[1]: Leaving directory `/cygdrive/c/make_pf'
#------------------------------------------------------------#
Target build properties

#------------------------------------------------------------#

в обновлениях Subdir.mk TARGET_PROPERTIE, хорошо, пока здесь.

Subdir.mk:8:  alpha beta

в Makefile.mk после возврата из «Subdir.mk - all target» сбрасывается в NULL. Не уверен, что я делаю не так

P.S. Я использую среду cygwin.

1 Ответ

3 голосов
/ 08 марта 2011

Экспортируемые переменные среды копируются в дочерние процессы, поэтому изменения там не распространяются обратно в родительский процесс.

Лучше всего было бы избегать рекурсивных make-файлов и вместо этого включать все изосновной Makefile.mk.Google для Recursive Make считается вредным для указателей, как это сделать.

...