将命令行参数添加到 Makefile [重复]

Posted

技术标签:

【中文标题】将命令行参数添加到 Makefile [重复]【英文标题】:Adding command line arguments to an Makefile [duplicate] 【发布时间】:2021-12-31 08:50:03 【问题描述】:

我目前正在编写一个Makefile,它允许我轻松启动一些命令,但我希望能够传递其他参数。我似乎找不到任何有关如何执行此操作的文档。

下面是我的简化 Makefile;

.PHONY: all

info: header usage

define HEADER

MY PROJECT HEADER

endef
export HEADER

header:
    @echo "$$HEADER"

usage:
    @echo "make test          Test environment"

test: header run_test

run_test:
    phpunit 

目前,如果我输入make test,它将运行我的 phpunit 测试套件。

我想要做的是在之后添加任何额外的参数,例如make test --filter=thistest .. 这个参数将被传递给 phpunit 命令,然后看起来像phpunit --filter=thistest 以及其他参数。

【问题讨论】:

您想要实现的用例使用 Make 是可行的,但与您建议的语法不同。也就是说,可以通过几种不同的方式将环境变量传递给make,并为这些变量指定默认值。 *** 上的其他问题似乎已经涵盖了这一点,因此我建议将您的问题标记为重复。 【参考方案1】:

传递给 make 的所有参数都由 make 解析。它们不会传递给某些进行调用的程序。不可能完全按照您的意愿行事。

您可以做的是在命令行上设置一个 make 变量,用于您要传递的参数,然后在您的配方中使用该变量:

run_test:
        phpunit $(PHP_FLAGS)

然后:

make PHP_FLAGS='--filter=thistest'

【讨论】:

我正要发表同样的解释,然后又回到单纯的评论;) 顺便说一句,如果有几个不同的 phpunit 参数并且它们的一些参数中有空格,我相信这不会很好地工作......但我不确定实际上提出另一个解决方案是否可行对于这个小问题(?) 无法格式化 cmets。但可能找到一个不同的答案也会起作用 如果你得到正确的引用,它会正常工作,这是一个 shell 问题而不是 make 问题。例如上面我使用单引号:我可以包含空格等。如果你需要你的参数包含引号,那么你必须将它们从 shell 中转义。等等。任何值都可以通过这种方式传递,但可能需要额外的引用层。

以上是关于将命令行参数添加到 Makefile [重复]的主要内容,如果未能解决你的问题,请参考以下文章

scrapy 怎样添加命令行参数

scrapy 怎样添加命令行参数

将字符串拆分(不解析)到命令行参数 C# [重复]

Makefile 命令行参数与 MinGW 目录路径混淆

带有命令行参数的 C++ 的 Makefile 和 Bash 脚本

什么是命令行参数?本人是c++菜鸟