如何在Makefile中向依赖目标的脚本传递运行时参数
解决Makefile中传递运行时参数给依赖目标的问题
你的需求可以通过两种常见方式实现,具体选择取决于你是否需要根据参数变化控制脚本的执行次数:
方式1:把downstream设为伪目标
如果不管之前有没有执行过,每次运行make upstream都要重新执行my_script.sh,直接把downstream标记为.PHONY目标即可。伪目标会被Make认定为永远“过时”,所以每次都会执行对应的命令,确保传入的MY_HASH能被脚本获取到。
修改后的Makefile代码:
.PHONY: upstream downstream upstream: downstream downstream: my_script.sh $(MY_HASH)
执行时直接使用make upstream MY_HASH=latest或者make upstream MY_HASH=123abc,脚本就能接收到对应的参数。
方式2:基于参数状态触发执行
如果希望只有当MY_HASH变化时才重新执行my_script.sh(避免重复执行相同参数的冗余操作),可以添加一个记录参数状态的文件,让downstream依赖这个文件:
upstream: downstream downstream: .my_hash my_script.sh $(MY_HASH) .my_hash: echo $(MY_HASH) > $@
工作逻辑:Make会检查.my_hash文件里的内容是否和当前传入的MY_HASH一致。如果不一致,就会重新生成这个文件并执行downstream的命令;如果一致,则跳过执行。
额外提示:可以在Makefile开头加个参数检查,防止忘记传MY_HASH:
ifndef MY_HASH $(error 必须传入MY_HASH参数,格式为make upstream MY_HASH=xxx) endif
内容的提问来源于stack exchange,提问作者rylp
相关产品推荐
相关产品推荐

