我有一个Makefile
,我正在尝试制作这组特定的变量和隐式规则
pcode-LINKDEPS := pasv5-database pasv5-log pasv5-utils
%/node_modules: $(%-LINKDEPS)
cd $*; npm install; for link in $^ ; do npm link $$link ; done
pasv5-database:
cd libs/database; npm link
我可以移除目录pcode/node_modules
并运行make -d
,我可以看到它选择了模式规则%/node_modules
并执行基本安装,但$^
扩展为空所以链接没有发生,并且先前必需的目标pasv5-database永远不会运行。这是否意味着我无法将%
放入先决条件扩展中,如果是这样,我可以采取什么方法来有效地为先决条件列表选择pcode-LINKDEPS
,因此目标{ {1}}运行?
或者我是否犯了一些其他根本错误?
pasv5-database(以及pcode-LINKDEPS的其他元素)都在pasv5-database
中定义。
答案 0 :(得分:3)
问题是在规则与您尝试构建的目标匹配之前,$(%-LINKDEPS)
已展开。而且由于你没有名为%-LINKDEPS
的变量,它会扩展为空。
.SECONDEXPANSION:
%/node_modules: $$(%-LINKDEPS)
...