Makefile .NOTPARALLEL:目标,使整个makefile不并行,而不仅仅是指定的目标

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

根据禁用并行执行添加带有先决条件的

.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

请帮忙

linux makefile build
1个回答
0
投票

您需要更新版本的 GNU Make。 来自新闻文件:

版本 4.4(2022 年 10 月 31 日)

...

  • 新功能:.NOTPARALLEL 接受先决条件 如果 .NOTPARALLEL 特殊目标有先决条件,则所有先决条件 这些目标中的一个将串行运行(就好像 .WAIT 是在 每个先决条件)。
© www.soinside.com 2019 - 2024. All rights reserved.