【发布时间】:2021-04-12 11:26:34
【问题描述】:
我正在尝试使用 python 脚本连接到一些 API。该 API 需要一个可用的环境变量。为了获得那个环境,我有另一个命令。我将这两个命令组合在一个 Makefile 命令中
# Current Makefile
cmd_1:
$(eval MY_ENV := $somevalue)
MY_ENV=$(MY_ENV) python myscript.py cmd_1
cmd_2:
$(eval MY_ENV := $somevalue)
MY_ENV=$(MY_ENV) python myscript.py cmd_2
现在你可以看到上面两个命令中的某些部分(第一行)是相同的。我想摆脱这种重复。我想要类似下面的东西,这样即使将来我有超过 2 个 mgmt 命令,我也可以重用它。
# Desired Makefile (Using DRY)?
get_env:
$(eval MY_ENV := $somevalue)
cmd_1:
MY_ENV=$(MY_ENV) python myscript.py cmd_1
cmd_2:
MY_ENV=$(MY_ENV) python myscript.py cmd_2
我试图包装这两个命令并创建另一个 Make 命令,如下所示。但没有运气。
mycmd:
@$(MAKE) get_env
@$(MAKE) cmd_1
所以我想知道是否有更好的方法来做到这一点?
【问题讨论】:
-
在收到答案后更改您的问题只会让未来的访问者感到困惑。现在答案没有意义,因为它指的是问题的早期版本。 (答案有待编辑,所以我现在不会回滚;但以后请不要这样做。)
-
我同意 Tripleee 的观点:我必须同时更改问题和答案才能再次成为问题的答案!请不要再更改。
-
您为什么要在配方中的
eval中设置变量?如果您希望它对两个规则都有效,为什么不将其设置为全局级别的 make 变量?
标签: makefile