Makefile(不区分大小写的目标)
使用 makefile 时,我希望能够实现以下操作:
make clean
make Clean
make CLean
make CLEan
make CLEAn
make ...
并且让所有人在我的 makefile 中执行相同的操作。
(即,我不想让目标区分大小写)
当然,我可以这样写每一个可能的内容:
.PHONY clean Clean CLean CLEan CLEAn ...
clean Clean CLean CLEan CLEAn ...:
$(DELETE_STUFF)
但我想你可以明白为什么这不是所希望的..
我知道“make”有一个名为:MAKECMDGOALS 的内置宏,它将等于您在键入 make 后键入的任何内容。
for example, running 'make clean all backup'
$(MAKECMDGOALS) = "clean all backup"
我尝试在 makefile 的顶部执行此操作:
MAKECMDGOALS:= $(shell echo $(MAKECMDGOALS) | tr "[:upper:]" "[:lower:]")
它确实将变量更改为全部小写,但仍然只会调用键入的目标目标的规则。
我什至尝试像这样覆盖它:
override MAKECMDGOALS:= $(shell echo $(MAKECMDGOALS) | tr "[:upper:]" "[:lower:]")
希望能尽快完成,但没有成功。
我本来打算设定这样的目标:
$(MAKECMDGOALS):
MAKECMDGOALS:= $(shell echo $(MAKECMDGOALS) | tr "[:upper:]" "[:lower:]")
#BUT I CAN'T CALL OTHER TARGETS FROM THE SHELL
我知道这是一个值得大惊小怪的愚蠢细节,但肯定有办法吧?
when using a makefile, I want the following to be possible:
make clean
make Clean
make CLean
make CLEan
make CLEAn
make ...
and have all to do the same thing in my makefile.
(ie. I don't want make goals to be case sensitive)
Sure, I could just write every possibly like this:
.PHONY clean Clean CLean CLEan CLEAn ...
clean Clean CLean CLEan CLEAn ...:
$(DELETE_STUFF)
but I think you can see why this is not desired..
I know that 'make' has a built in macro called: MAKECMDGOALS which will be equal to whatever you type after typing make.
for example, running 'make clean all backup'
$(MAKECMDGOALS) = "clean all backup"
I tried to do this at the top of my makefile:
MAKECMDGOALS:= $(shell echo $(MAKECMDGOALS) | tr "[:upper:]" "[:lower:]")
it does change the variable to all lowercase, but will still only call the rule for the target goal typed.
I've even tried to override it like this:
override MAKECMDGOALS:= $(shell echo $(MAKECMDGOALS) | tr "[:upper:]" "[:lower:]")
in hopes that will be done sooner, yet no success.
I was going to make a target like this:
$(MAKECMDGOALS):
MAKECMDGOALS:= $(shell echo $(MAKECMDGOALS) | tr "[:upper:]" "[:lower:]")
#BUT I CAN'T CALL OTHER TARGETS FROM THE SHELL
I know it's a silly detail to fuss over, but surely there has got to be a way right?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
粗略但有效:
Crude but effective:
您可以生成目标,例如通过使用 shell(至少在 GNU Make 中):
另一个解决方案是编写一个包装器,将参数小写并调用 make,仅接受小写目标。
You can generate your targets, for example by using the shell (at least in GNU Make):
Another solution would be to write a wrapper that will lowercase the arguments and call make, accepting only lowercase targets.