Verificação de uma condição de linha no Makefile

2

Estou tentando conseguir algo assim: Se o usuário executar make build_x version=1.0 , mostre Building version 1.0 , senão ( make build_x sem version param) mostre Building version latest . Mas qual é a chave aqui - eu preciso da versão ser - por valor padrão (para poder usá-lo corretamente com git ). É por isso que uso a variável adicional version_info para substituir - por latest .

Então, meu código é assim:

build_x:
    $(eval version ?= -)        
    $(eval version_info = ${if ["${version}" == "-"], "latest", "${version}"})

    ${INFO} "Doing checkout according to version $(version_info)..."

Eu sei que provavelmente o problema é com essa condição dada a if .

Alguma idéia?

    
por marverix 05.07.2017 / 09:59

2 respostas

3

Isso funciona para mim:

version ?= -
ifeq (-,$(version))
  version_info = latest
else
  version_info = $(version)
endif

build_x:
    @echo version_info = $(version_info)

Define version para - se não estiver definido e preenche version_info apropriadamente.

Usando variáveis específicas de alvo e uma variante de uma linha:

build_x: version ?= -
build_x: version_info = $(if $(version:-=),$(version),latest)
build_x:
    @echo version_info = $(version_info)

Isso funciona da seguinte maneira (veja a documentação do GNU Make ):

  • version ?= - define version como - se ainda não estiver definido
  • if verifica seu primeiro argumento , avalia para ver se está vazio ou não, e é substituído pelo segundo argumento se o primeiro não for vazio e o terceiro for
  • $(version:-=) avalia version , substituindo - com a string vazia ( : introduz a substituição, a chave de busca é o texto antes de = , a substituição é o texto depois de = )
por 05.07.2017 / 10:07
0

Você pode usar o recurso de valor de variável específico do destino aqui:

build_x: version := latest
build_x:
     @echo "Building version $(version)"
    
por 05.07.2017 / 10:10

Tags