在 make 命令中传递参数



>我在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 data --cg=xyz
这不是

make的工作方式。您询问的内容通常是通过在Makefile中声明一个变量来完成的,然后您可以从命令行覆盖该变量。

CGFLAGS=
## Make Dataset
data: requirements
    $(PYTHON_INTERPRETER) src/data/make_dataset.py $(CGFLAGS)

现在,如果您传入make CGFLAGS='--cg=xyz' data则在命令行中指定的变量的值将被显式内插到data配方中。

你可以做这样的事情:

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建议的操作

最新更新