递归Makefile相互依赖性跟踪

时间:2014-07-11 17:25:21

标签: recursion makefile cmake

我们说我的目录结构如下:

root->utils
root->lib
root->bar->lib1
root->bar->lib2
root->foo->lib3

utils完全独立,但lib1lib2取决于utils。此外,lib3取决于lib1

递归make看起来像这样:

all:
  $(MAKE) -C utils
  $(MAKE) -C bar/lib1
  $(MAKE) -C bar/lib2
  $(MAKE) -C foo/lib3

但是,我有两个要求。首先,我需要支持并行构建。其次,我希望能够独立构建子目录。除非我创建某种JOBS=1变量,然后使用-j$(JOBS)调用每个品牌,否则第一个要求对于Makefile来说似乎是不可能的,但是这仍然不是真正的并行,因为它不会做在lib1之后的同一时间lib2utils。第二个要求意味着lib1lib2的Makefile也必须调用$(MAKE) -C $(TOP)/utils。我已经阅读了大部分关于制作一个全局Makefile的文章,但我不喜欢缺乏模块化。

有没有解决这些低效率和冗余问题的方法?有没有一种标准的方法来处理它们?

CMake是否解决了这些问题,或者只是将其全部从视图中解决?换句话说,调用由cmake生成的并行make可能会并行构建lib1lib2,还是会经历相同的冗余?

最后,如果我同时从$(MAKE) -C utilslib1调用lib2会怎样?这些请求是否会被适当地锁定,或者它们是否会发生冲突并造成混乱?

0 个答案:

没有答案