makeのすべてのターゲットを一覧表示するには?

makeのすべてのターゲットを一覧表示するには?

多くのMakefileを含むプロジェクト構造があり、他のすべてのMakefileを含む最上位のMakefileがあるとします。

可能なすべての目標をリストする方法は?

私は書くことを知っています

make 

その後、Tabキーを押して提案を受け取るのが一般的ですが、私の場合は10,000のターゲットがありました。そうすると、結果が次に渡されます。もっとそして何らかの理由でリストをスクロールすると停止現象が発生します。別の方法がありますか?

答え1

Bash Completeモジュールmakeがリストを取得する方法は次のとおりです。

make -qp |
    awk -F':' '/^[a-zA-Z0-9][^$#\/\t=]*:([^=]|$)/ {split($1,A,/ /);for(i in A)print A[i]}' |
    sort -u

改ページなしで改行で区切られたターゲットのリストを印刷します。

答え2

FreeBSDとNetBSD make(1)にはという名前の組み込み変数があります.ALLTARGETS。次のように内容を印刷できます。

make -V .ALLTARGETS

残念ながら、これは空白で区切られたリストを印刷します。次はもっと役に立つと思いました。

make -V .ALLTARGETS | tr ' ' '\n'

各ターゲットを独自の行に印刷します。

答え3

これはスクリプトが実行する作業を非常に単純化したバージョンですbash-completion

make -npq : 2> /dev/null | \
    awk -v RS= -F: '$1 ~ /^[^#%.]+$/ { print $1 }'

関連情報