при использовании make-файла я хочу, чтобы было возможно следующее:
make clean
make Clean
make CLean
make CLEan
make CLEAn
make ...
, и я должен все делать то же самое в моем make-файле.
(т.е. я не хочу делать целибыть чувствительным к регистру)
Конечно, я мог бы написать все, что угодно, например:
.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"
Я пытался сделать это в верхней части моего make-файла:
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
Я знаю, что это глупая деталь, о которой нужно суетиться, но, конечно, должен быть способ, верно?