make:依赖项超过1%

时间:2016-04-21 11:49:27

标签: makefile gnu-make

我很想使用以下形式的模板依赖

data/%/ld.data :: data/%/%LD.jsn

现在,只有第一个百分号登录依赖项data/%/%LD.jsn被目标中的目录替换,如GNUmake手册中所述

是否有任何简单的方法可以获得所需的功能,即指定 data / Folder /ld.data 形式的所有文件都取决于相应的文件的数据/ 文件夹 / 文件夹 LD.data 即可。

我可以使用循环构建规则,但这需要提前指定所有相关文件夹,并在添加新文件夹时编辑makefile(或在makefile start中动态查找它们)

2 个答案:

答案 0 :(得分:4)

是的,有一种更简单的方式;在第二次扩展期间使用自动变量(这实际上是最初创建允许的第二次扩展):

.SECONDEXPANSION:
data/%/ld.data : data/$$*/$$*LD.jsn
        actions

答案 1 :(得分:0)

我改编自http://bitofahack.com/post/1406231094的一个解决方案就像这样

.SECONDEXPANSION:
data/%/ld.data: LANGNAME=$(notdir $(patsubst %/,%,$(dir $@)))
data/%/ld.data: LDFILE=data/$(LANGNAME)/$(LANGNAME)LD.jsn

data/%/ld.data: $$(LDFILE)
   actions

但这看起来很麻烦,对$(notdir ...)$(dir ...)无法合作的疯狂方式一无所知