在make命令中传递参数

时间:2019-06-18 08:05:52

标签: python makefile

我在makefile中有一个名为“数据”的目标(取自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

2 个答案:

答案 0 :(得分:3)

这不是make的工作方式。通常,您要问的是在Makefile中声明一个变量,然后可以从命令行覆盖它。

CGFLAGS=

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

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

答案 1 :(得分:0)

您可以执行以下操作:

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