Make:动态文件递归?

问题描述 投票:0回答:1

假设我具有以下目录结构,并且具有根节点:


/root/
  Makefile
  branch1/
  branch2/
  .../

而且我写了以下最小的makefile:

branches=$(shell find * -maxdepth 1 -type d -printf "%f "}

%:
    -${MAKE} ${MAKECMDGOALS} -C branch1
    -${MAKE} ${MAKECMDGOALS} -C branch2
    ...

已经准备好使用branches变量动态执行此中继,并尝试了几种通配符和后代规则变体而没有成功,我的问题是:如何从外部范围捕获any命令目标(例如我现在正在执行),并对find表达式检测到的每个文件执行make Relay?

使用伪代码(不适用于我的make版本,这是Cygwin上的最新版本):

branches=$(shell find * -maxdepth 1 -type d -printf "%f "}

branch-%:
    -${MAKE} ${MAKECMDGOALS} -C $*

%: ${foreach branch,${branches}, branch-${branch}}

与原始makefile不同,这不起作用。但是,似乎应该如此。有办法吗?

还有第二个问题

Make的并行性将由我的伪代码方法(如果可行)使用-j选项以指数扇形散开,而我使用的第一种方法不会破坏并行性。

但是,理想情况下,此makefile应该能够为分支列表中的每个文件动态执行一个make relay。但是,我目前看不到一种动态实现此方法的方法。

假设我具有以下目录结构,并带有一个根节点:/ root / Makefile branch1 / branch2 / ... /我编写了以下最小的makefile:branch = $(shell find * -maxdepth 1 -...

makefile gnu-make
1个回答
0
投票

首先,我不确定为什么要使用复杂的shell函数;为什么不只是:

© www.soinside.com 2019 - 2024. All rights reserved.