【问题标题】:Adding command line arguments to an Makefile [duplicate]将命令行参数添加到 Makefile [重复]
【发布时间】: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,并为这些变量指定默认值。 StackOverflow 上的其他问题似乎已经涵盖了这一点,因此我建议将您的问题标记为重复。

标签: bash makefile gnu-make


【解决方案1】:

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

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

run_test:
        phpunit $(PHP_FLAGS)

然后:

make PHP_FLAGS='--filter=thistest'

【讨论】:

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