如何为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)
工作原理
- 参数检测:用
filter函数检查MAKECMDGOALS(Make存储命令行目标的变量)中是否包含--non-dist,如果有就标记NON_DIST为true。 - 清理目标列表:把
--non-dist从目标列表中移除,防止Make误认为它是一个需要构建的目标而报错。 - 参数切换:根据
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
相关产品推荐
相关产品推荐

