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

Makefile 有没有办法让(递归的)make-j调用先进入深度?,makefile,Makefile,我有一个“典型的”递归Makefile构建了一系列库(每个库有数百个cpp文件)和一台8核机器 现在,当我运行make-jn时,我看到make(gnumake3.81,记录在案)以广度优先的方式运行,立即启动~N个递归调用(从它在属于不同库的并行文件中构建的输出可以看出) 为了进行实验,我试着先进行一个深度手动步骤,通过做一个 for i in list-of-subdirs-topologically-sorted; do pushd "$i" && make -j

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

现在,当我运行
make-jn
时,我看到
make
(gnumake3.81,记录在案)以广度优先的方式运行,立即启动~N个递归调用(从它在属于不同库的并行文件中构建的输出可以看出)

为了进行实验,我试着先进行一个深度手动步骤,通过做一个

for i in list-of-subdirs-topologically-sorted; do 
    pushd "$i" && make -j N && popd
done
令我惊讶的是,这缩短了冷缓存的构建时间近一分钟。我想CPU缓存使用率(以及磁盘使用率)会更好,可能是因为在库中,您会发现相同的包含多次,或者诸如此类

那么,是否有一个开关可以让
make
首先进行深度操作

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

那么,有没有一个开关可以让make先进行深度操作呢

否。截至2018年GNU make 4.2.1,不存在


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

我认为,影响
make-j
构建顺序的唯一方法是在各个步骤中更改先决条件的顺序,因为make默认尝试按顺序构建先决条件,并且在
-j
模式下,大多数情况下会保持顺序(我相信)。