makefile - 远程服务器上的 Makefile 最大负载
问题描述
我们有一个庞大的项目,在 Unix 上运行非常耗时的子任务。整个制作过程运行多个小时。因此,并行构建对我们来说至关重要。昂贵的作业是通过 ssh 在远程服务器上执行的。一切正常。但我担心团队成员会不小心忘记指定 -j 标志的编号。--load-average 标志使用本地服务器上的负载,因此无论远程服务器有多忙,它都会在远程服务器上生成数百个子任务,这会减慢整个公司的速度。请注意,我在两台服务器上都没有管理员权限。我们也可以忍受限制工作的数量(硬编码)。
非常感谢卡尔
解决方案
-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; 我没有测试它。
推荐阅读
- c# - 如何实例化泛型类
- xml - Powershell 中的 XML 解析
- azure - 在虚拟机上运行命令失败并阻止其他“Invoke-AzureRmVMRunCommand”
- python - 在 Pandas 中,在 grouby 和 pd.cut 之后,如何重新排列数据框以随时间按每个 bin 绘制?
- maven - Maven,替换文件中的令牌以进行调试和编译
- javascript - 如何访问 JS 函数
- kubernetes - Openshift 4.2 OLM - 操作员依赖
- javascript - MDC - 无法初始化文本输入
- oracle-apex - 在交互式报告中使用页面项目的动态 where 子句不起作用
- gradle - 如何使用 Gradle 为包文档配置 Dokka?