Sebagai ditunjukkan mklement0 , fitur untuk mendaftarkan semua target Makefile hilang dari GNU-make, dan jawabannya serta yang lain menyediakan cara untuk melakukan ini.
Namun, posting asli juga menyebutkan rake , yang tugasnya beralih melakukan sesuatu yang sedikit berbeda dari sekadar mendaftar semua tugas di rakefile. Rake hanya akan memberi Anda daftar tugas yang memiliki deskripsi terkait. Tugas tanpa deskripsi tidak akan dicantumkan . Ini memberi penulis kemampuan untuk memberikan deskripsi bantuan yang disesuaikan dan juga menghilangkan bantuan untuk target tertentu.
Jika Anda ingin meniru perilaku rake, di mana Anda memberikan deskripsi untuk setiap target , ada teknik sederhana untuk melakukan ini: embed deskripsi dalam komentar untuk setiap target yang ingin Anda daftarkan.
Anda dapat meletakkan deskripsi di sebelah target atau, seperti yang sering saya lakukan, di sebelah spesifikasi PHONY di atas target, seperti ini:
.PHONY: target1 # Target 1 help text
target1: deps
[... target 1 build commands]
.PHONY: target2 # Target 2 help text
target2:
[... target 2 build commands]
...
.PHONY: help # Generate list of targets with descriptions
help:
@grep '^.PHONY: .* #' Makefile | sed 's/\.PHONY: \(.*\) # \(.*\)/\1 \2/' | expand -t20
Yang akan menghasilkan
$ make help
target1 Target 1 help text
target2 Target 2 help text
...
help Generate list of targets with descriptions
Anda juga dapat menemukan contoh kode pendek di intisari ini dan juga di sini .
Sekali lagi, ini tidak menyelesaikan masalah daftar semua target dalam Makefile. Misalnya, jika Anda memiliki Makefile besar yang mungkin dihasilkan atau yang ditulis orang lain, dan Anda ingin cara cepat untuk membuat daftar target tanpa menggali melalui itu, ini tidak akan membantu.
Namun, jika Anda menulis Makefile, dan Anda menginginkan cara untuk menghasilkan teks bantuan secara konsisten, cara mendokumentasikan diri sendiri, teknik ini mungkin berguna.
alias makefile-targets='grep "^[^#[:space:]].*:" Makefile'
Paling sering saya hanya perlu memeriksa makefile saat ini, dan penyelesaian bash meluas alias saya.