如何在Makefile中接收命令行参数并透传给内部执行命令
Makefile 透传参数给内部命令实现方案
你可以通过以下两种常用方案实现需求:
方案1:自定义变量传参(最推荐,兼容性最好)
这是行业内最通用的实现方式,不会和make内置参数逻辑冲突,修改成本极低。
- 修改Makefile中的
run_test目标,追加自定义变量接收参数:
run_test: phpunit $(ARGS)
- 执行命令时通过
ARGS变量传入你需要的所有phpunit参数:
# 单参数示例 make test ARGS="--filter=thistest" # 多参数示例 make test ARGS="--filter=thistest -v --debug"
你也可以同步修改usage提示,方便后续使用:
usage: @echo "make test Test environment" @echo "make test ARGS=\"<参数>\" Run test with custom phpunit arguments"
方案2:直接后缀传参
如果你不想每次输入ARGS=前缀,可以通过--分隔符实现参数直接透传,需要额外处理make的目标匹配逻辑:
- 完整修改后的Makefile如下:
.PHONY: all info: header usage define HEADER MY PROJECT HEADER endef export HEADER header: @echo "$$HEADER" usage: @echo "make test Test environment" @echo "make test -- <参数> Run test with custom phpunit arguments" test: header run_test run_test: phpunit $(filter-out $@,$(MAKECMDGOALS)) # 匹配所有未定义的目标,避免make报不存在目标的错误 %: @:
- 执行命令时需要用
--分隔make目标和透传参数:
make test -- --filter=thistest
注意:如果不加
--,带-开头的参数会被make识别为自身的内置选项,没有对应选项时会直接报错,因此该方案仅适合习惯添加分隔符的场景。
内容的提问来源于stack exchange,提问作者BigJobbies
相关产品推荐
相关产品推荐

