我在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
答案 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建议的操作