我的makefile包含node_modules
目录的目标,该目标取决于package.json
文件:
node_modules: package.json
npm install && touch "$@"
我当前的项目恰好有一个"子包"有自己的依赖集。我将上面的目标修改为以下内容:
%/node_modules: %/package.json
cd $(shell dirname "$<") && npm install && touch node_modules
现在,我可以执行make path/to/subpackage/node_modules
和make
运行预期的npm install
命令。但是,我似乎无法执行make node_modules
- make
退出状态代码0
和消息无法为节点模块执行任何操作&#39;。
这表示make
现在只运行存在于子目录中的 node_modules 文件夹的相应命令。
如何更改目标,使其支持同一目标中的嵌套和根node_modules
目录?
换句话说,我想删除重复的目标定义,因为生成root node_modules 目录的命令与生成嵌套路径的命令相同/ to / node_modules 目录。
作为研究,我试图查看GNU Make tutorial,但找不到任何相关信息 - 可能是因为我根本不知道该找什么。
答案 0 :(得分:0)
它不是很优雅,但您可以使用"canned recipe":
define MAKE_NODE_MODULES
npm install && touch node_modules
endef
node_modules: package.json
$(MAKE_NODE_MODULES)
%/node_modules: %/package.json
cd $* && $(MAKE_NODE_MODULES)