在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命令中传递参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python通过命令参数传递IP列表:端口[重复]

传递给命令 WPF 的多个参数 [重复]

如何从命令行传递参数到Makefile?

在java中传递-d选项[重复]

通过 make 参数而不是 Makefile 传递编译器标志

如何向Makefile传递参数?