根目录或嵌套目录

时间:2018-01-22 13:35:34

标签: makefile gnu-make

我的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_modulesmake运行预期的npm install命令。但是,我似乎无法执行make node_modules - make退出状态代码0和消息无法为节点模块执行任何操作&#39;。

这表示make现在只运行存在于子目录中的 node_modules 文件夹的相应命令。

如何更改目标,使其支持同一目标中的嵌套和根node_modules目录?

换句话说,我想删除重复的目标定义,因为生成root node_modules 目录的命令与生成嵌套路径的命令相同/ to / node_modules 目录。

  

作为研究,我试图查看GNU Make tutorial,但找不到任何相关信息 - 可能是因为我根本不知道该找什么。

1 个答案:

答案 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)