【问题标题】:How can I pass arguments to a make rule?如何将参数传递给 make 规则?
【发布时间】:2021-09-20 04:45:10
【问题描述】:

假设我有一个使用 make 安装的 python 项目。我希望能够在不先安装项目的情况下运行该项目。所以我创建了这个 make 规则:

run:
    @echo "Running projectname"
    @PYTHONPATH=${PYTHONPATH}:$(abs_srcdir)/..; ./projectname

./projectname 运行一个简单的 python 脚本来设置和运行项目,但这在这里并不重要。像这样,我可以简单地在项目的根文件夹中执行make run 来执行和测试我的应用程序,它工作得非常好。现在,我想将一些命令行参数传递给程序。我尝试了make run --help,它刚刚打印了make 的帮助文本。运行make run -- --help打印

Running projectname
make: *** No rule to make target '--help'.  Stop.

应用程序正在运行,在我退出后,make 尝试执行目标 --help

现在,我如何通过make--help 参数传递给我的应用程序?

【问题讨论】:

  • 这不是make 的用途。只需编写一个简单的包装脚本,适当地设置PYTHONPATH,然后将它自己的参数传递给projectname
  • 简短回答:你不能。 Make 的命令行由 make 解释。它不会传递给运行程序。如答案中所述,您可以将make变量设置为某个值,然后在makefile中使用该变量,因为make会在其命令行中解释变量赋值。

标签: makefile command-line arguments sh command-line-arguments


【解决方案1】:
make run ARGS=“arg1 arg2”

您的 makefile 中的$(ARGS) 将扩展为您传递的内容。

【讨论】:

  • 你将如何处理像./projectname "arg one" "arg two"这样的事情?
  • @chepner -- 你只需要make run ARGS='"arg one" "arg two"' (或者转义引号......)。
猜你喜欢
  • 2011-01-13
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多