Mklement0'ın işaret ettiği gibi , tüm Makefile hedeflerini listeleme özelliği GNU- make'de eksiktir ve yanıtı ve diğerleri bunu yapmanın yollarını sağlar.
Bununla birlikte, orijinal gönderi , görev geçişi, komisyondaki tüm görevleri listelemekten biraz farklı bir şey yapan komisyondan da bahseder . Komisyon, size yalnızca ilişkili açıklamaları olan görevlerin bir listesini verecektir. Açıklamaları olmayan görevler listelenmeyecektir . Bu, yazara hem özelleştirilmiş yardım açıklamaları sunma hem de belirli hedefler için yardımı atlama yeteneği verir.
Her hedef için açıklama sağladığınız komisyonun davranışını taklit etmek istiyorsanız, bunu yapmak için basit bir teknik vardır: Listelenmesini istediğiniz her hedef için açıklamaları gömün.
Açıklamayı hedefin yanına veya sık sık yaptığım gibi, hedefin yukarısında bir PHONY belirtiminin yanına koyabilirsiniz:
.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
Hangisi verecek
$ make help
target1 Target 1 help text
target2 Target 2 help text
...
help Generate list of targets with descriptions
Bu özette ve burada da kısa bir kod örneği bulabilirsiniz .
Yine, bu bir Makefile'deki tüm hedefleri listeleme problemini çözmez. Örneğin, büyük olasılıkla oluşturulmuş veya başka birinin yazdığı büyük bir Makefile'niz varsa ve hedeflerini kazmadan listelemenin hızlı bir yolunu istiyorsanız, bu yardımcı olmaz.
Bununla birlikte, bir Makefile yazıyorsanız ve yardım metnini tutarlı ve kendi kendini belgeleyen bir şekilde oluşturmanın bir yolunu istiyorsanız, bu teknik yararlı olabilir.
alias makefile-targets='grep "^[^#[:space:]].*:" Makefile'Çoğu zaman sadece şimdiki makefile incelemek gerekir ve bash tamamlama genişletildiği takma adım.