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í nastavenif
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 – jak omezená je distribuce založená na Linuxu na Nokii N900?
Jak číst celý skript Shell před jeho spuštěním?