Bash 具有不应硬编码但应在规则调用时作为参数传递的参数

Bash 具有不应硬编码但应在规则调用时作为参数传递的参数,bash,makefile,Bash,Makefile,有一个makefile,其中规则dev create empty migration,当前,此规则具有硬编码参数accounts\u table,此参数不应硬编码,但应在规则调用时作为参数传递。EG使开发人员创建空迁移帐户\u表 有什么办法吗 .PHONY: dev-create-empty-migration dev-create-empty-migration: migrate create -ext sql -dir ./pkg/acc/repo/postgres/migratio

有一个makefile,其中规则
dev create empty migration
,当前,此规则具有硬编码参数
accounts\u table
,此参数不应硬编码,但应在规则调用时作为参数传递。EG使开发人员创建空迁移帐户\u表

有什么办法吗

.PHONY: dev-create-empty-migration
dev-create-empty-migration:
    migrate create -ext sql -dir
./pkg/acc/repo/postgres/migrations accounts_table

您应该使用一个变量并在其中存储一些内容。通过使用
?=
,首先搜索参数。如果找到,则使用参数,否则使用默认内容

$ cat Makefile 
VAR     ?= derp
test:
        @echo $(VAR)
$ make
derp
$ make VAR=lala
lala
仅仅因为它很有趣,你也可以做如下的事情。这省略了使用额外的参数,但是您当然可以进行一些混合

$ cat Makefile 
VAR     := None

dev-create-empty-migration-%_table:
        $(eval VAR=$(patsubst dev-create-empty-migration-%,%,$@))
        @echo $(VAR)
$ make dev-create-empty-migration-derp_table
derp_table                 
检查,它可能会解决您的问题