【发布时间】:2014-08-28 04:56:33
【问题描述】:
在这一点上,我只想找到一些有用的东西(this 和 this,虽然没有必要阅读,这个当前的问题应该更简单)。
我想创建一个适用于子目录的 make 任务,其中包含动态(未知)数量的子文件。你可以在make中做到这一点吗?
build/%.js: $(shell find apps/% -type f -name '*.js')
假设您希望最终的目录树如下所示:
build/
build/page.js
build/popup.js
apps/
apps/page/
apps/page/index.js
apps/page/lib/
apps/page/lib/a.js
apps/page/lib/b.js
apps/popup/
apps/popup/index.js
当您更改任何 index.js 文件或嵌套在 lib/*.js 内的文件时,相应的文件夹应该重建。
make 如何做到这一点?无需重复,如果您有一堆类似的非 DRY 构建任务,这很简单。
我也试过这个:
build/%.js: apps/%/index.js apps/%/lib/*.js
但这只有在每个项目中都存在lib/*.js 时才有效。上面示例目录树中的“弹出”项目没有,因此它永远不会构建。
所以基本上,这些目标需要是“可选的”。一个简单的例子是这样的:
build.js: $(shell find apps -type f -name '*.js')
如果apps/ 文件夹中的任何 *.js 文件发生更改,这将创建一个build.js 文件。基本上这就是我想要的,主要区别是我想要一个变量名:
build/%.js: $(shell find apps/% -type f -name '*.js')
但这不起作用,因为似乎 % 没有在 $(shell) 函数内进行评估(不确定它应该如何工作或记录在哪里)。但本质上,这就是我想做的全部。
这可能吗?
【问题讨论】: