【发布时间】:2010-03-26 23:42:38
【问题描述】:
不确定这是否可能仅在一个 Makefile 中实现,但我希望以一种方式编写 Makefile,以便尝试在文件中构建任何目标自动检测当前系统上的处理器数量并构建并行目标的处理器数量。
类似于下面的“伪代码”示例,但更简洁?
all:
@make -j$(NUM_PROCESSORS) all
或者:
all: .inparallel
... build all here ...
.inparallel:
@make -j$(NUM_PROCESSORS) $(ORIGINAL_TARGET)
在这两种情况下,您只需输入:
% make all
希望这是有道理的。
更新:仍然希望上面有一个示例 Makefile。对查找进程数不是很感兴趣,但对如何编写一个生成文件以在没有 -j 命令行选项的情况下并行构建感兴趣。
【问题讨论】:
-
不要试图在一个 Makefile 中进行。据我所知,标准技术是有一个简单的顶级 Makefile 调用另一个,在这种情况下使用类似 $(MAKE) -j $(NUM_PROCESSORS) -f $(THE_REAL_MAKEFILE) 的东西。
-
真正的解决方案是使用基于更强大的流程建模技术的 make 替代方案,但我不知道有什么好的候选者(我为该技术做,但不是为工具)。
-
如this unix.stackexchange.com reply 所示,只需使用 make -j$(nproc)
标签: makefile parallel-processing