如何像shell脚本一样在makefile中获取$@



&&如何获得运行"make"或"make all"后的参数?

现在我有:

all:echo
target=$(filter-out all,$(MAKECMDGOALS))
echo:
    @echo $(target)
结果:

  make abc
  make: *** No rule to make target `abc'.  Stop.
  &&
  make all abc
  abc
  make: *** No rule to make target `abc'.  Stop.

预期的结果:

   make abc
   abc
   &&
   make all abc
   abc

我没有看到你的用例,这似乎很奇怪,但这里有一个解决方案可能会帮助你:

target=$(filter-out all,$(MAKECMDGOALS))
$(info $(target))
.PHONY: $(target)
all $(target):
    @:

解释:make abc没有触发目标all,因此在您的尝试中没有触发echo。如果您总是希望看到target的值,请使用$(info ...)

为了抑制"No rule to make target…",您需要显式地让make(实际上我只测试了GNUmake)知道存在这样一个目标并且没有什么可做的。这就是上面最后一部分的内容。.PHONY:列出的目标只是一个符号,不指向实际的文件。然后,您需要为这些目标(以及all)设置一个不做任何事情的规则。@:做到了这一点:@确保命令不回显,:只是shell的无操作方式。

最新更新