1

我有一个有多个目标的 Makefile。其中之一就是自动生成 cpp 代码。第二个是指定编译那些生成的cpp。

我已经配置了一个分布式编译集群,我只想指定一些作业用于编译 cpp 文件本身。生成部分的另一个不同数量的工作。

可能吗?

这个想法是使用“make -j30”通过 distcc 将构建分发到几个可用的主机,但是专用于生成定义到 Makefile 中的代码的目标不能拆分为 30 个作业,因为这个目标只会在本地处理。并且本地主机没有 30 个核心来处理它们,所以机器冻结了。这就是我需要为生成阶段定义作业数量和为编译阶段定义另一数量的作业的原因。

4

1 回答 1

1

这个想法是使用“make -j30”通过 distcc 将构建分发到几个可用的主机,但专用于生成代码的目标......将在本地处理。并且本地主机没有 30 个核心来处理它们,所以机器冻结

手动设置不同的并发作业数量静态限制的替代方法是让 GNU Make 通过系统负载动态限制作业。请参阅此处记录-l的or--max-load选项。

这应该可以防止本地代码生成作业使系统过载,同时允许全部数量的 distcc 作业并行运行(假设它们对本地系统负载没有太大影响——它们不应该影响运行队列)阻止等待来自远程构建的输入)。

$ make -j30 -l5 ...

你必须为你的系统选择一个合适的负载值,我不能帮你。尝试top在构建期间运行并观察平均负载部分。

于 2021-11-25T17:19:36.070 回答