&&如何获得运行"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的无操作方式。