У меня есть команда с двумя знаками доллара (вторичное расширение)Вторичное расширение и два Makefiles
$(PREFIX)/bin/gdk-pixbuf-query-loaders > $(shell $(PREFIX)/bin/gdk-pixbuf-query-loaders | awk -F "=" '/LoaderDir/ {print $$2}' | tr -d ' ')/../loaders.cache
Команда оболочка должна извлечь путь из следующего выхода:
...
# LoaderDir = /home/redux/x-libs/i686-nptl-linux-gnu/lib/gdk-pixbuf-2.0/2.10.0/loaders
...
При запуске сделать то правило расширится до следующей команды:
/home/redux/x-libs/i686-nptl-linux-gnu/bin/gdk-pixbuf-query-loaders > /home/redux/x-libs/i686-nptl-linux-gnu/lib/gdk-pixbuf-2.0/2.10.0/loaders/../loaders.cache
Это нормально, но если я использую вторую команду Makefile, который запускает первый, то правило расширяется до
/home/redux/x-libs/i686-nptl-linux-gnu/bin/gdk-pixbuf-query-loaders > /../loaders.cache
и встретилась ошибка:
/bin/sh: 11: cannot create /../loaders.cache: Permission denied
Команда для запуска первого файла из второго Makefile выглядит следующим образом:
$(MAKE) -f $(makefile_path)/build_libs_for_host.mk .print_and_write_triplets $(RULES) JOBS=$(JOBS) HOST=$(patsubst build_host_%,%,[email protected])
И команда (в bash) для запуска второго файла makefile (который запускает первый, который я создал):
time make -f ~/_dev/_pro/second.mk all RULES=build_gdk_pixbuf JOBS=-j4 |& tee ~/log_20170221_x-libs.txt
Оба make-файла используют .SECONDEXPANSION:
. Я не вижу ошибки.
Теперь я застрял. Что случилось с этим расширением?
У GNU make есть некоторые магические правила, и, возможно, мне нужно добавить параметр в строку $(MAKE)
?
Рекурсивный дизайн? Звучит забавно". – melpomene
', SECONDEXPANSION' относится только к оценке предпосылок правил; это абсолютно не влияет на содержание рецептов. Учитывая информацию здесь, мы не можем вам помочь, есть еще кое-что, что вы нам не сказали. Я рекомендую запускать отдельные команды и печатать их выходные данные, чтобы узнать, в чем разница. Возможно, одна из переменных, добавленных в командную строку, изменяет поведение gdk-pixbuf-query-loaders.Добавьте '$ (info $ (shell $ (PREFIX)/bin/gdk-pixbuf-query-loaders))' и сравните два способа вызова make. – MadScientist