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 ?= -
setversion
ke-
jika belum disetelif
memeriksa 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=
)