我有一个带有两个美元符号的命令(二次扩展)
$(PREFIX)/bin/gdk-pixbuf-query-loaders > $(shell $(PREFIX)/bin/gdk-pixbuf-query-loaders | awk -F "=" '/LoaderDir/ {print $$2}' | tr -d ' ')/../loaders.cache
shell 命令应该从以下输出中提取路径:
...
# LoaderDir = /home/redux/x-libs/i686-nptl-linux-gnu/lib/gdk-pixbuf-2.0/2.10.0/loaders
...
当我运行 make 然后规则扩展为以下命令:
/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 启动第一个 makefile 的命令如下:
$(MAKE) -f $(makefile_path)/build_libs_for_host.mk .print_and_write_triplets $(RULES) JOBS=$(JOBS) HOST=$(patsubst build_host_%,%,$@)
启动第二个makefile(启动我创建的第一个makefile)的命令(在bash中)是:
time make -f ~/_dev/_pro/second.mk all RULES=build_gdk_pixbuf JOBS=-j4 |& tee ~/log_20170221_x-libs.txt
两个 makefile 都使用.SECONDEXPANSION:
. 我看不到错误。
现在我被困住了。这个扩展有什么问题?
GNU make 有一些神奇的规则,也许我必须$(MAKE)
在行中添加一个参数?