You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Makefile的sct目标添加自定义non-dist选项?

实现Makefile中sct目标的可选--non-dist标志

没问题,完全可以给你的sct目标添加这个可选标志。下面是具体的实现方案,基于GNU Make(大部分场景下的标准Make工具):

具体实现步骤

在你的Makefile中添加以下逻辑:

# 检查命令行是否传入了--non-dist参数
ifneq ($(filter --non-dist,$(MAKECMDGOALS)),)
NON_DIST := true
# 移除--non-dist,避免Make将其识别为一个需要构建的目标
MAKECMDGOALS := $(filter-out --non-dist,$(MAKECMDGOALS))
endif

# 默认使用并行测试参数
PYTEST_PARALLEL ?= -n auto
# 如果开启non-dist模式,切换为单线程
ifeq ($(NON_DIST),true)
PYTEST_PARALLEL := -n0
endif

sct:
	# 这里写你的预处理工作,比如环境准备、文件生成等
	# echo "Executing preprocessing steps..."
	python -m pytest $(PYTEST_PARALLEL)

工作原理

  1. 参数检测:用filter函数检查MAKECMDGOALS(Make存储命令行目标的变量)中是否包含--non-dist,如果有就标记NON_DIST为true。
  2. 清理目标列表:把--non-dist从目标列表中移除,防止Make误认为它是一个需要构建的目标而报错。
  3. 参数切换:根据NON_DIST的值动态设置pytest的并行参数,默认用-n auto,开启non-dist模式时用-n0。

使用方式

  • 默认并行测试:make sct
  • 单线程测试:make sct --non-dist

备选方案(更简洁的变量传递)

如果你觉得--non-dist的写法太麻烦,也可以用变量直接传递的方式:

PYTEST_PARALLEL ?= -n auto
ifeq ($(NON_DIST),1)
PYTEST_PARALLEL := -n0
endif

sct:
	# 预处理工作
	python -m pytest $(PYTEST_PARALLEL)

使用时:

  • 默认:make sct
  • 单线程:make sct NON_DIST=1

内容的提问来源于stack exchange,提问作者T. Fahrner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:52:49