-1

Mac で BASH を実行compgen -c make しており、次の戻り値を取得しています。

makepqg
makepqg
makepqg
make
makeinfo
makepqg
makepqg

しかし、私が欲しいものとすべきものは何ですか?取得する(および完了するときに取得する)は次のとおりです。

foo
bar
biz
baz

これは、自動化を行うさまざまな PHONY make ルールを表しています。


一般に、実行可能ツールを使用して、SHELL からこのリストをどのように生成しますcompgenか?

(これは理想的な質問です。なぜなら、python3からsubprocessは相互作用をシミュレートできず、もっと複雑なことをしなければならないからです)


これは重複候補の「make でターゲットを取得する方法 (言い換え)」とは異なります。(動作しない) コマンドは良い答えではないと思います。この質問はcompgenandmakeではなくmakeandに関するものです。の内部動作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 シミュレーターを使用してタブタブをシミュレートすることなく、任意のメイクファイルに対して (一般性を失うことなく)これを実行できますか?

4

1 に答える 1