Mac で BASH を実行compgen -c make
しており、次の戻り値を取得しています。
makepqg
makepqg
makepqg
make
makeinfo
makepqg
makepqg
しかし、私が欲しいものとすべきものは何ですか?取得する(および完了するときに取得する)は次のとおりです。
foo
bar
biz
baz
これは、自動化を行うさまざまな PHONY make ルールを表しています。
一般に、実行可能ツールを使用して、SHELL からこのリストをどのように生成しますcompgen
か?
(これは理想的な質問です。なぜなら、python3からsubprocess
は相互作用をシミュレートできず、もっと複雑なことをしなければならないからです)
これは重複候補の「make でターゲットを取得する方法 (言い換え)」とは異なります。(動作しない) コマンドは良い答えではないと思います。この質問はcompgen
andmake
ではなくmake
andに関するものです。の内部動作make
:
make -p no_targets__
| awk -F':' '/^[a-zA-Z0-9][^\$$#\/\\t=]*:([^=]|$$)/ {split(\$$1,A,/ /);for(i in A)print A[i]}' "
| grep -v '__\$$' "
| sort
しかし、正規表現を使用して高レベルの目的のために何らかの解決策を得ることができますか?
私の意見では、いいえ、なぜなら compgen は簡単で記憶に残るからです。一方、このクラッジは難しく、上に積み上げたコードにドラッグを導入します。
また、複製により、メイクファイルに変更を加えることができます。
私の場合、メイク ファイルは与えられたものと見なす必要があります。
したがって、より具体的には、makefile が与えられた場合、 make を調べて make を取得し、bash 補完の場合と同様にレシピのリストを出力できる、make 以外のツールを含むソリューションはありますか。
言い換えれば、メイクファイルへの書き込み権限を必要とせず、tty シミュレーターを使用してタブタブをシミュレートすることなく、任意のメイクファイルに対して (一般性を失うことなく)これを実行できますか?