有没有办法让(递归)make -j调用首先进入深度?

时间:2015-07-01 10:44:56

标签: makefile

我有一个典型的"递归Makefile构建一系列库(每个库有数百个cpp文件)和一个8核机器。

现在,当我运行make -j N时,我看到make(GNU Make 3.81,用于记录)以广度优先的方式运行,立即启动~N个递归调用(正如我从输出中看到的那样)它构建属于不同库的并行文件。)

为了实验,我尝试通过做一个深度优先的手动步骤

for i in list-of-subdirs-topologically-sorted; do 
    pushd "$i" && make -j N && popd
done

令我惊讶的是,从冷藏缓存的构建时间开始,这几乎缩短了一分钟。我猜有更好的CPU缓存使用率(以及磁盘使用率),也许是因为在库中你会发现包含很多次的相同包含,或者诸如此类...

那么,是否有切换实际让make以深度优先的方式运行?

(是的,未来路线图将转换为CMake +忍者......)

1 个答案:

答案 0 :(得分:1)

  

那么,有没有切换到实际上让make在深度优先操作?

没有。不像2018年的GNU make 4.2.1那样。

我也倾向于认为深度优先搜索是一个概念,适用于使用单个游标搜索树状数据结构。使用N个游标并行进行深度优先搜索意味着什么?这个定义明确吗?