Recursive `Make` and `-J`
5 hours ago
- Makefile中的递归make调用可能会丢失并行性,因为jobserver(-j)没有转发给子make。
- 在配方行前加'+'或者使用$(MAKE)代替make可以修复jobserver转发,并确保使用相同的make二进制文件。
- 不同版本的GNU Make(3.81、4.0、4.2.1、4.3)在递归make使用-j时表现出不同的行为和警告信息。
- 在递归配方中使用-j(例如make -j2)会强制指定并行度并禁用jobserver模式,从而导致警告。
- 推荐的可移植方法是使用$(MAKE)来正确继承jobserver,但这并不能消除所有警告。