根据禁用并行执行添加带有先决条件的
.NOTPARALLEL:
目标,使先决条件串行运行。
如果在任何地方指定了没有先决条件的 .NOTPARALLEL 特殊目标,则无论并行设置如何,整个 make 实例都将串行运行。
如果 .NOTPARALLEL 特殊目标有先决条件,则每个先决条件都将被视为一个目标,并且这些目标的所有先决条件都将串行运行。请注意,只有在构建此目标时,先决条件才会串行运行:如果其他目标列出了相同的先决条件并且不在 .NOTPARALLEL 中,则这些先决条件可能会并行运行。
不幸的是,它不适用于我的情况。
makefile
:
t%:
@ echo "$@..."
@ sleep 0.0$*
@ echo "$@ - done"
notpara: t4 t3 t2 t1
@ echo "Done!"
para: t4 t3 t2 t1
@ echo "Done!"
.NOTPARALLEL: notpara
运行
notpara
目标时,我确实让它们同步运行:
$ make -j notpara
t4...
t4 - done
t3...
t3 - done
t2...
t2 - done
t1...
t1 - done
Done!
但是当我运行
para
目标时我也会得到它,它应该并行运行:
$ make -j para
t4...
t4 - done
t3...
t3 - done
t2...
t2 - done
t1...
t1 - done
Done!
当删除
.NOTPARALLEL:
时,一切都变得不平行:
$ make -j notpara
t4...
t3...
t2...
t1...
t1 - done
t2 - done
t3 - done
t4 - done
Done!
$ make -v
GNU Make 4.3
请帮忙
您需要更新版本的 GNU Make。 来自新闻文件:
版本 4.4(2022 年 10 月 31 日)
...
- 新功能:.NOTPARALLEL 接受先决条件 如果 .NOTPARALLEL 特殊目标有先决条件,则所有先决条件 这些目标中的一个将串行运行(就好像 .WAIT 是在 每个先决条件)。