Melepaskan Interpolasi Ungkapan dalam Makefiles
Apabila menulis Makefiles, adalah perkara biasa untuk ingin melaksanakan perintah yang menggabungkan ungkapan. Contoh biasa perkara ini ialah dalam ujian, di mana anda mungkin mahu menjalankan ujian secara selektif berdasarkan kriteria tertentu.
Andaikan anda sedang mengusahakan projek Go dan ingin mengecualikan ujian daripada direktori vendor. Anda boleh melakukannya dengan mudah dalam baris arahan menggunakan:
$ go test $(go list ./... | grep -v /vendor/)
Walau bagaimanapun, apabila anda cuba memasukkan ini ke dalam Makefile:
test: go test $(go list ./... | grep -v /vendor/) .PHONY: test
Anda akan perasan bahawa ungkapan itu bukan diinterpolasi:
$ make go test ? github.com/m90/some-repo [no test files]
Untuk menyelesaikan isu ini, anda perlu melepaskan aksara "$" dalam ungkapan menggunakan satu saat "$":
test: go test $$(go list ./... | grep -v /vendor/) .PHONY: test
Dengan melarikan diri dari "$", anda mengarahkan Makefile untuk mentafsir ungkapan sebagai perintah literal untuk dilaksanakan, dan bukannya cuba menggantikan pembolehubah.
Atas ialah kandungan terperinci Bagaimana Saya Melarikan Diri Interpolasi Ungkapan dalam Makefiles untuk Melaksanakan Perintah dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!