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íversionna-pokud již není nastavenifzkontroluje 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?