在make命令中传递参数[重复]
Posted
技术标签:
【中文标题】在make命令中传递参数[重复]【英文标题】:Passing argument in make command [duplicate] 【发布时间】:2019-10-31 19:47:15 【问题描述】:我在 makefile 中有一个名为 'data' 的目标(取自 cookiecutter),我正在尝试将一个参数传递给该目标,该目标正在调用如下文件:
## Make Dataset
data: requirements
$(PYTHON_INTERPRETER) src/data/make_dataset.py
我想向这个 make 目标传递一些参数,以便它们可以被 make_dataset.py 文件捕获并在 main 中使用。
我在 make_dataset.py 中尝试的部分看起来像:
@click.command()
@click.option('--cg', default='scope', help= "some help")
def main(cg):
有人可以帮我解决这个问题吗?我想像这样使用这个 make 目标:
make data --cg=xyz
【问题讨论】:
【参考方案1】:你可以这样做:
CG:=
CG_OPT:=$(addprefix --cg=,$(CG))
data: requirements
$(PYTHON_INTERPRETER) src/data/make_dataset.py $(CG_OPT)
然后做:
make data CG=xyz
请注意,如果您未在 make 命令行上指定 CG=...
,则 $(CG_OPT) 将为空白。不幸的是,使用以--
开头的变量名可能会造成混淆,尽管也可以这样做:
--cg:=
data: requirements
$(PYTHON_INTERPRETER) src/data/make_dataset.py $(addprefix,--cg=,$(--cg))
但是,为了防止 make 将 --cg
解释为内部 make 选项,您必须在命令行中添加 --
选项,如下所示:
make data -- --cg=xyz
注意:这一切都假设你想要做一个特定的变量名--cg=
。如果您希望它适用于任何变量名,则必须执行类似于 @tripleee 建议的操作
【讨论】:
【参考方案2】:make
不是这样工作的。您的要求通常通过在 Makefile
中声明一个变量来完成,然后您可以从命令行覆盖该变量。
CGFLAGS=
## Make Dataset
data: requirements
$(PYTHON_INTERPRETER) src/data/make_dataset.py $(CGFLAGS)
现在,如果您传入 make CGFLAGS='--cg=xyz' data
,您在命令行中指定的变量的值将显式插入到 data
配方中。
【讨论】:
以上是关于在make命令中传递参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章