GNU/Linux >> Znalost Linux >  >> Linux

Kontrola stavu jednoho řádku v Makefile?

Snažím se dosáhnout něčeho takového:
Pokud uživatel spustí make build_x version=1.0 poté zobrazte Building version 1.0 , else (make build_x bez version param) show Building version latest . Ale co je zde klíčové – potřebuji, aby verze byla - výchozí hodnota (aby bylo možné ji správně používat s git ). To je důvod, proč používám další proměnnou version_info pro nahrazení - s latest .

Můj kód tedy vypadá takto:

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

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

Vím, že problém je pravděpodobně s touto podmínkou danou if .

Nějaké nápady?

Přijatá odpověď:

Toto funguje pro mě:

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

build_x:
    @echo version_info = $(version_info)

Nastavuje version na - pokud není nastaveno, vyplní version_info přiměřeně.

Použití cílově specifických proměnných a jednořádkové varianty:

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

Funguje to následovně (viz celková dokumentace GNU Make):

  • version ?= - nastaví version na - pokud již není nastaven
  • if zkontroluje svůj první argument, vyhodnotí jej, aby zjistil, zda je prázdný nebo ne, a je nahrazen druhým argumentem, pokud první není prázdný, a třetím, pokud ano
  • $(version:-=) vyhodnotí version , nahrazující - s prázdným řetězcem (: zavádí náhradu, vyhledávací klíč je text před = , nahrazením je text za = )

Linux
  1. Jak zkontrolovat verzi Redhat

  2. Jak zkontrolovat verzi Ubuntu z příkazového řádku

  3. Jeden řádek if/else podmínka ve skriptování linuxového shellu

  1. Jak zkontrolovat verzi jádra v Linuxu v příkazovém řádku

  2. Zkontrolujte používanou verzi Wordpressu

  3. Jak zkontrolovat verzi CentOS

  1. Jak zkontrolovat verzi PHP

  2. Jak zkontrolovat verzi TensorFlow

  3. Zkontrolujte verzi AlmaLinux