
Sempre que eu mencionar alguma versão junto com o comando de execução deste makefile essa versão deverá ser armazenada na variável VERSION, caso nenhuma versão seja mencionada o valor padrão deverá ser tomado.
Este é o meu 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))
CASO 1: estou recebendo esta saída quando incluo argumento para execução
BUILDVERSION is "VABCDE.00.00A001"
vers is VABCDE.00.00A002
VERSION is "VABCDE.00.00A001"
CASO 2: Estou recebendo este erro quando não incluo argumento para execução
Makefile:1: *** empty variable name. Stop.
Makefile:1: *** empty variable name. Stop.
Alguém poderia me ajudar a descobrir o que há de errado com meu código!
Responder1
Não tenho certeza, entendi a pergunta.
Se sua tarefa é fornecer um número de versão de fora make
e usar o valor padrão se nenhuma versão foi fornecida na linha de comando. Então o makefile
deverá ficar assim:
VERS = VABCDE.00.00A002
$(info BUILDVERSION is "$(BUILDVERSION)")
$(info vers is "$(VERS)")
ifdef BUILDVERSION
VERSION := $(BUILDVERSION)
else
VERSION := $(VERS)
endif
$(info VERSION is $(VERSION))
E você chamaria isso com:
make BUILDVERSION="not-default-version"
Responder2
export $(BUILDVERSION) = $2
dr; GNU make não é bash.
O $(BUILDVERSION)
só se expandiria para qualquer coisa se você invocasse make
as make BUILDVERSION=something
, o que fará com que essa linha a) defina something
como amacro semelhante a uma funçãoque se expandirá para seu segundo argumento quando usado como $(call something, ...)
, e b) exportará umvaziovariável de ambiente nomeada something
para os comandos executados a partir de regras make.
Se BUILDVERSION
não estiver definido ou estiver definido como uma string vazia, você receberá esse empty variable name
erro.
$ 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
faznãoexpanda para o segundo argumento passado na linha de comando do make, porque ... make não é bash.