
Всякий раз, когда я упоминаю какую-либо версию вместе с командой выполнения этого make-файла, эта версия должна быть сохранена в переменной VERSION; если версия не указана, следует взять значение по умолчанию.
Это мой Makefile
export $(BUILDVERSION) = $2
VERS = VABCDE.00.00A002
$(info BUILDVERSION is "$(BUILDVERSION)")
$(info vers is "$(VERS)")
ifneq ($(BUILDVERSION),undefined)
VERSION := $(VERS)
endif
ifneq ($(BUILDVERSION),undefined)
VERSION := $(BUILDVERSION)
endif
$(info VERSION is $(VERSION))
СЛУЧАЙ 1: Я получаю этот вывод, когда включаю аргумент для выполнения
BUILDVERSION is "VABCDE.00.00A001"
vers is VABCDE.00.00A002
VERSION is "VABCDE.00.00A001"
СЛУЧАЙ 2: Я получаю эту ошибку, когда не включаю аргумент для выполнения
Makefile:1: *** empty variable name. Stop.
Makefile:1: *** empty variable name. Stop.
Может ли кто-нибудь помочь мне найти ошибку в моем коде!
решение1
Я не уверен, я понял вопрос.
Если ваша задача — предоставить номер версии извне make
и использовать значение по умолчанию, если версия не была предоставлена в командной строке. Тогда это makefile
должно выглядеть так:
VERS = VABCDE.00.00A002
$(info BUILDVERSION is "$(BUILDVERSION)")
$(info vers is "$(VERS)")
ifdef BUILDVERSION
VERSION := $(BUILDVERSION)
else
VERSION := $(VERS)
endif
$(info VERSION is $(VERSION))
И вы бы вызвали его с помощью:
make BUILDVERSION="not-default-version"
решение2
export $(BUILDVERSION) = $2
tl;dr; GNU make — это не bash.
Будет $(BUILDVERSION)
расширяться во что-либо только если вы вызовете make
как make BUILDVERSION=something
, что приведет к тому, что эта строка будет а) определена something
какмакрос, подобный функциикоторый будет расширяться до своего второго аргумента при использовании в качестве $(call something, ...)
, и б) экспортироватьпустойпеременная окружения, названная something
в честь команд, запускаемых из правил make.
Если BUILDVERSION
не определено или определено как пустая строка, вы получите эту empty variable name
ошибку.
$ make -f - <<'EOT' BUILDVERSION=something
export $(BUILDVERSION) = $2
all:; set | grep ^something; echo XXX $(call something,first,second)
EOT
set | grep ^something; echo XXX second
something=''
XXX second
$2
делаетнетрасширить до второго аргумента, переданного в командной строке make, потому что ... make — это не bash.