如何在Makefile中向Python脚本传递命令行参数?
解决Makefile传递参数给Python脚本的问题
我来帮你搞定这个Makefile传参的需求!下面给你两种实用的方法,根据你的场景选就行:
方法1:指定固定参数变量
如果希望用户通过明确的变量名传递type参数,可以这样写Makefile:
command: python abc.py --type "$(TYPE)"
使用的时候,直接在命令行传入TYPE变量的值:
make command TYPE="blah"
这样Make就会把$(TYPE)替换成你输入的内容,最终执行python abc.py --type "blah"。如果需要支持短格式-t,也可以改成-t "$(TYPE)",或者两种格式都写上,看你需求。
方法2:传递任意命令行参数
要是想更灵活,让用户能直接像运行Python脚本一样传递任意参数(不管是--type还是-t,甚至其他脚本支持的参数),可以用这个写法:
command: python abc.py $(filter-out $@,$(MAKECMDGOALS)) # 这个空目标用来避免Make把参数当成未知目标报错 %: @:
现在你就能直接这样调用:
make command --type "blah" # 或者短格式 make command -t "blah"
$(filter-out $@,$(MAKECMDGOALS))的作用是把命令行里除了command这个目标之外的所有参数都提取出来,传递给你的Python脚本。后面的%:空目标是为了防止Make把你传入的参数(比如--type)当成一个要构建的目标而报错。
小提示
如果参数里包含空格、$这类特殊字符,记得用双引号括起来,避免被Make或者shell解析出错哦。
内容的提问来源于stack exchange,提问作者Aditya Mishra




