首页 > 解决方案 > 远程服务器上的 Makefile 最大负载

问题描述

我们有一个庞大的项目,在 Unix 上运行非常耗时的子任务。整个制作过程运行多个小时。因此,并行构建对我们来说至关重要。昂贵的作业是通过 ssh 在远程服务器上执行的。一切正常。但我担心团队成员会不小心忘记指定 -j 标志的编号。--load-average 标志使用本地服务器上的负载,因此无论远程服务器有多忙,它都会在远程服务器上生成数百个子任务,这会减慢整个公司的速度。请注意,我在两台服务器上都没有管理员权限。我们也可以忍受限制工作的数量(硬编码)。

非常感谢卡尔

标签: makefile

解决方案


-j如果您有 GNU make 4.2 或更高版本,您可以通过查看以下内容来检查用户是否未提供原始信息MAKEFLAGS

ifeq (-j,$(filter -j,$(MAKEFLAGS)))
  $(error You cannot use -j without specifying a number of jobs)
endif

如果您有早期版本的 GNU make,您可以通过检查两者是否都已提供-j且作业服务器处于活动状态来执行此操作:

ifneq (,$(filter -j,$(MAKEFLAGS)))
  ifneq (,$(filter --jobserver-%,$(MAKEFLAGS)))
    $(error You cannot use -j without specifying a number of jobs)
  endif
endif

(此版本也适用于较新的版本)。

这可能不适用于 GNU make <4.0; 我没有测试它。


推荐阅读