Apa perbedaan antara: = dan = di Makefile?


Jawaban:


80

Ini dijelaskan dalam dokumentasi GNU Make, di bagian berjudul 6.2 Dua Rasa Variabel .

Singkatnya, variabel yang ditentukan dengan :=diperluas satu kali, tetapi variabel yang ditentukan dengan =diperluas setiap kali variabel tersebut digunakan.


4
Jadi, apakah benar untuk mengatakan bahwa: = lebih efisien? Atau apakah efisiensi sebenarnya bukan merupakan faktor dengan Makefiles?
Ungeheuer

3
@Ungeheuer Itu bukan masalah karena panggilan proses ( maketugas utama) memiliki overhead yang jauh lebih besar daripada penyelesaian variabel internal tersebut.
Kirill Bulygin

68

Tugas sederhana :=

Ekspresi tugas sederhana dievaluasi hanya sekali, pada kejadian pertama. Misalnya, jika CC :=${GCC} ${FLAGS}selama pertemuan pertama dievaluasi gcc -Wmaka setiap kali ${CC}terjadi akan diganti dengan gcc -W.

Penugasan rekursif =

Ekspresi tugas rekursif dievaluasi setiap kali variabel ditemukan dalam kode. Misalnya, pernyataan suka hanya CC = ${GCC} {FLAGS}akan dievaluasi ketika tindakan suka ${CC} file.cdijalankan. Namun, jika variabel GCCtersebut ditetapkan ulang yaitu GCC=c++maka variabel tersebut ${CC}akan diubah menjadi c++ -Wsetelah penugasan ulang.

Penugasan bersyarat ?=

Penetapan bersyarat memberikan nilai ke variabel hanya jika tidak memiliki nilai

Menambahkan +=

Asumsikan bahwa CC = gccmaka operator menambahkan digunakan seperti CC += -w
itu CCsekarang memiliki nilaigcc -W

Untuk lebih lanjut, lihat tutorial ini


"Ekspresi tugas sederhana dievaluasi hanya sekali, pada kejadian pertama": agar jelas, perluasan / evaluasi dilakukan saat variabel ditentukan, bukan pertama kali digunakan.
Michael Burr

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.