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