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

如何在makefile中像shell脚本一样获取$@,makefile,Makefile,&&运行“make”或“make all”后如何获取args 现在我有: 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 `

&&运行“make”或“make all”后如何获取args

现在我有:

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
。如果您总是想查看
目标的值
,请使用
$(信息…

为了抑制“无规则生成目标…”,您需要显式地让make(实际上我只测试了GNUmake)知道存在这样一个目标,而无需执行任何操作。这就是上面最后一部分的内容
.PHONY:
列出的目标仅是一个符号,不涉及实际文件。然后,您需要为这些目标(以及
all
)设置一个不起任何作用的规则<代码>@:这样做:
@
确保命令不被回显,
只是shell的禁止操作方式。

这些不是“参数”,而是其他目标。你可以用你拥有的过滤器获得它们,但make仍将尝试构建它们。实际上,
abc
没有规则(甚至没有生成规则),你还期望什么(你想要的结果没有清楚地解释这一点)?还有,你为什么在这个问题上加上标签?你是在写你的makefile呢,还是生成的?