LINUX.ORG.RU

рекурсивный Make


0

2

Всем привет, использую рекурсивный мейк по совершенно обычному принципу:

@if [ "$(SUBDIRS)" != "" ] ; then \
	for i in $(SUBDIRS) ; do \
		echo "Making $(TARGET)" ; \
		${MAKE} -C $$i ; \
	done ; \
fi

т.е. значение переменной TARGET определенно, но не передается make нижнего уровня.

Но получается, что почему-то значение этой переменной передается мейку, по крайней мере он об этом знает.

Как изолировать два этих мейка? Что я делаю не так?

″unexport TARGET″ или проверять в make нижнего уровня ${MAKELEVEL} и игнорировать TARGET.

mky ★★★★★
()
Ответ на: комментарий от mky

Make нижнего уровня трогать не имею права, т.к. это мэйк драйверов.

нужно просто прописать

unexport TARGET

в мэйке верхнего уровня?

igormat
() автор топика

Не помогло, Make многоуровневый. TARGET кое-где должен передаваться. Но вот в Makefle уровнем выше прописал

unexport TARGET

не помогло((( в makefile, который я не могу меня есть вот такая вот конструкция, затык происходит на ней, в TARGET содержится цель от предыдущего Make.

$(TARGET): $(OBJS)
	$(CC) -o $@ $^ $(LDFLAGS)

Можно как-нибудь удалить старое значение TARGET?

igormat
() автор топика
Ответ на: комментарий от igormat

Вы можете вместо

${MAKE} -C $$i
поставить вызов своего скрипта, который, для начала, может просто вывести все переменные среды ( set ) в файл, чтобы было видно, есть там $TARGET или нет. А потом вы можете передать этому скрипту параметром $$i, из этого скрипта сделать unset всех не нужных переменных, сдлать ″cd $i″ и запускать ″/usr/bin/make″.

Я понимаю, что советую костыль, но если вам нужно «здесь и сейчас», то ничего другого предложить не могу. Разбираться, почему у вас в sub-make оказывается определённым TARGET можно долго. Да и назначение конструкции:

$(TARGET): $(OBJS)
мне не понятно.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.