Saya mencoba mencapai sesuatu seperti ini:
Jika pengguna akan menjalankan make build_x version=1.0 lalu tampilkan Building version 1.0 , else (make build_x tanpa version param) tampilkan Building version latest . Tapi apa kuncinya di sini – saya perlu versi menjadi - dengan nilai default (untuk dapat menggunakannya dengan benar dengan git ). Inilah mengapa saya menggunakan variabel tambahan version_info untuk mengganti - dengan latest .
Jadi kode saya terlihat seperti ini:
build_x:
$(eval version ?= -)
$(eval version_info = ${if ["${version}" == "-"], "latest", "${version}"})
${INFO} "Doing checkout according to version $(version_info)..."
Saya tahu bahwa mungkin ada masalah dengan kondisi ini yang diberikan kepada if .
Ada ide?
Jawaban yang Diterima:
Ini bekerja untuk saya:
version ?= -
ifeq (-,$(version))
version_info = latest
else
version_info = $(version)
endif
build_x:
@echo version_info = $(version_info)
Ini menetapkan version ke - jika tidak disetel, maka isi version_info dengan tepat.
Menggunakan variabel spesifik target, dan varian satu baris:
build_x: version ?= -
build_x: version_info = $(if $(version:-=),$(version),latest)
build_x:
@echo version_info = $(version_info)
Ini berfungsi sebagai berikut (lihat dokumentasi GNU Make secara keseluruhan):
version ?= -setversionke-jika belum disetelifmemeriksa argumen pertama, mengevaluasi untuk melihat apakah itu kosong atau tidak, dan diganti dengan argumen kedua jika yang pertama tidak kosong, dan yang ketiga jika$(version:-=)mengevaluasiversion, menggantikan-dengan string kosong (:memperkenalkan penggantian, kunci pencarian adalah teks sebelum=, penggantinya adalah teks setelah=)