Apa yang dilakukan hal-hal berikut dalam Makefile?
rule: $(deps)
@:
Sepertinya saya tidak dapat menemukan ini di manual make.
Itu berarti "jangan gema perintah ini pada output." Jadi aturan ini mengatakan "jalankan perintah shell:
dan jangan gema output.
Tentu saja perintah shell :
adalah no-op, jadi ini mengatakan "jangan lakukan apa-apa, dan jangan katakan."
Mengapa?
Kuncinya di sini adalah bahwa Anda memiliki kombinasi yang tidak jelas dari dua sintaks yang berbeda. The make (1) sintaks adalah penggunaan tindakan dimulai dengan @, yang tidak hanya echo perintah. Jadi aturannya seperti
always:
@echo this always happens
tidak akan memancarkan
echo this always happens
this always happens
Sekarang, bagian aksi aturan bisa saja perintah shell, termasuk :
. Bantuan Bash menjelaskan ini juga di mana saja:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
@:
(bukan hanya@
) maka selain jawaban @ guestolio itu juga bisa menjadi sisa rintisan dari pengembangan. Ini seperti menulis fungsi dengan Python yang hanya berisipass
. Ini dapat berguna untuk mematikan blok kode untuk copy / paste tetapi umumnya tidak seharusnya ada lama. Ketika mematikan cara ini file tersebut akan tetap dikompilasi, lulus linting, dll.Bagi mereka yang penasaran mengapa Anda melakukan ini, akan berguna jika Anda ingin berpura-pura seperti sesuatu telah dilakukan, sehingga Make tidak menampilkan "Tidak ada yang harus dilakukan untuk" target Anda.
Salah satu contoh adalah jika Anda memiliki target palsu yang selalu Anda jalankan, dan di dalamnya Anda memiliki banyak persyaratan dalam perintah. Anda ingin memiliki setidaknya sesuatu jika kondisi tersebut salah dan tidak ada yang dilakukan.
Misalnya (dari skrip Linux / Makefile.clean):
sumber