如何向Makefile的依赖目标传递参数?
你将变量赋值写在all目标的依赖列表中是不生效的,Makefile的依赖列表只会被解析为目标名称,不会识别为变量声明,所以setup和clean目标拿不到对应参数。可以通过以下几种方法实现参数传递:
方案1:目标特定变量(所有依赖共用相同参数)
给all目标设置专属变量,该变量会自动作用于all自身的执行命令,以及它的所有依赖目标:
setup: @echo "setup 收到参数 myarg = $(myarg)" # 此处替换为你实际的setup命令 clean: @echo "clean 收到参数 myarg = $(myarg)" # 此处替换为你实际的clean命令 # 给all目标设置专属变量,所有依赖都会继承该值 all: myarg=value # 声明all的依赖 all: setup clean @echo "setup & clean"
执行make all时,setup和clean都会自动拿到myarg=value的参数。
方案2:给不同依赖单独传不同参数
如果setup和clean需要不同的参数值,可以给每个目标单独设置专属变量:
setup: @echo "setup 收到参数 myarg = $(myarg)" clean: @echo "clean 收到参数 myarg = $(myarg)" # 给setup单独指定参数 setup: myarg=setup_val # 给clean单独指定参数 clean: myarg=clean_val all: setup clean @echo "setup & clean"
方案3:支持外部传参+内置默认值
如果你希望参数可以在执行make命令时手动覆盖,同时保留默认值,可以用条件赋值:
# 全局默认值:如果执行make时没有手动传myarg,就用该默认值 myarg ?= default_value setup: @echo "setup 收到参数 myarg = $(myarg)" clean: @echo "clean 收到参数 myarg = $(myarg)" all: setup clean @echo "setup & clean"
这种方式下,执行make all会用默认的default_value,执行make all myarg=custom_val就会使用你传入的自定义参数值。
内容的提问来源于stack exchange,提问作者kumail
相关产品推荐
相关产品推荐

