И это всё МОЁ

Есть сборка RPM-пакетов софтины через rpmbuild. Задача стоит опакетить это под DEB. Для сборки запускается shell-скрипт, который тянет исходники из git, патчит их, парсит конфигурацию сборки и выставляет -D и -I для сборки в переменных для Makefile-ов через export, и запускает rpmbuild.

rpmbuild делает в итоге

make -C каталог all
и собирает RPM-ы из бинарников. На замену rpmbuild решено было использовать свой Makefile. Shell-скрипт поправлен так, чтобы вызывал этот скрипт
make -f make_deb.mak
. Из shell в Makefile переменные передаются через export, все нормально, переменные видны. Но в Makefile при сборке target-ов происходит что-то мне непонятное. Для теста сделал отдельный пример.

var = ""
val = "value"
num = 1

.PHONY: all

all: test6

test:
echo "1#### "$$var ; \
if [ -z $$var ] ; then \
var="$(val)"; \
echo "2#### var="$$var; \
else \
echo "3#### FAIL"; \
fi; \
echo "4#### "$$var

test4:
echo "##### test4"$(optflags)
if [ -z "${CFLAGS}" ]; \
then \
CFLAGS=${optflags}; \
echo $$CFLAGS ; \
fi ; \
echo $$CFLAGS

test6:
@PYTHON=/usr/bin/python3 ; \
TESTVAR=test ; \
env ; \
echo $(PYTHON) ; \
./a.sh

Заданные в Makefile переменные, в нем же видны (test).
Заданные в bash-консоли переменные видны (test4).

optflags=anyflags; make -f b.sh test4

Заданные во фрагменте shell-кода (test6) переменные не видны ни в следующих командах вставки, ни в вызываемом ./a.sh (там тоже просто echo $(PYTHON)).
Какую магию нужно использовать в этом случае?








 , ,