Makefile如何接收参数

📅 2026/8/12 12:25:44
Makefile如何接收参数
Makefile 接收参数主要有以下几种方式从最常见到进阶依次说明1. 命令行覆盖变量最常用makefile# Makefile IMAGE_NAME ? myapp TAG ? latest build: docker build -t $(IMAGE_NAME):$(TAG) .运行时可以覆盖bashmake build IMAGE_NAMEnginx TAG1.24?表示默认值命令行传入的值会覆盖它。如果用定义则命令行无法覆盖除非用-e强制。2. 使用$(filter-out)接收额外参数当参数不是KEYVALUE形式而是自由参数时makefile# Makefile run: echo Running with args: $(filter-out $,$(MAKECMDGOALS)) python main.py $(filter-out $,$(MAKECMDGOALS)) %: :运行bashmake run -- --envprod --debug # 输出: Running with args: --envprod --debug$(filter-out $,$(MAKECMDGOALS))会过滤掉当前目标名保留后面的所有参数。最后的%: :是一个吞噬规则避免 Make 把额外参数当作目标名报错。3. 通过环境变量传递bashexport ENVproduction make deploy或在 Makefile 中读取makefiledeploy: echo Deploying to $(ENV)4. 使用MAKEFLAGS或--分隔bashmake test --verbose --fail-fast配合 Makefilemakefile# 将 MAKEFLAGS 或额外参数传给子命令 test: go test ./... $(ARGS)bashmake test ARGS-v -run TestFoo5. 实用模板通用参数传递如果你希望所有目标都能接收任意参数makefile# Makefile .PHONY: help build run .DEFAULT_GOAL : help ARGS : $(filter-out $,$(MAKECMDGOALS)) help: echo Usage: make [target] [args...] build: docker build $(ARGS) -t myapp . run: docker run $(ARGS) myapp %: :使用bashmake build -- --no-cache make run -- -p 8080:80 -d总结表格场景方式KEYVALUE形式make VARvalue?默认值自由参数如--flag$(filter-out $,$(MAKECMDGOALS))%: :显式传参make target ARGS...环境相关环境变量或.env文件最推荐的是方式1变量覆盖用于配置方式2filter-out用于传递命令行标志两者结合可以覆盖绝大多数场景。