web-dev-qa-db-ja.com

makefileターゲットのbash補完

次のような単純なmakefileがあるとします。

hello:
   echo "hello world"

bye:
   echo "bye bye"

次に、bashでは次のようなものが必要です:

作る<タブ>

だからそれは完了することができます

こんにちは

空のファイルhellobyeを作成するような簡単な方法を見つけましたが、もっと何かを探しています洗練された

47

これはあなたが探しているものでしょうか?

http://freshmeat.net/projects/bashcompletion/

make [Tab]はMakefileのすべてのターゲットで完了します。このプロジェクトは、最も一般的なLinux/UNIXコマンド用のプログラム可能な完了ルーチンを作成し、システム管理者やプログラマーが毎日行う必要のある入力の量を削減するために考案されました。

10
Kos

これを〜/ .bash_profileファイルまたは〜/ .bashrcファイルに追加します

complete -W "\`grep -oE '^[a-zA-Z0-9_.-]+:([^=]|$)' Makefile | sed 's/[^a-zA-Z0-9_.-]*$//'\`" make

これは、grepを使用して、Makefileの 'Makefile'(大文字のMに注意)というターゲットを検索し、completebashのコマンドで、引数の完了方法を指定するために使用されます。 -Wフラグは、「complete」コマンドへの入力が、grepの結果をsed望ましいwordlist形式に配置します。

警告と落とし穴:

  1. Makeファイルの名前は「GNUMakefile」、「makefile」、または「Makefile」以外です。このようなタイトルに頻繁に遭遇する場合は、上記と同じ形式で、目的のメイクファイルタイトルを〜/ .bashrcまたは〜/ .bash_profileファイルの「Makefile」の場所に追加して、行を追加してください。

  2. 変更後、〜/ .bash_profileまたは〜/ .bashrcファイルを読み込むのを忘れます。初心者には馴染みがないので、一見取るに足らない詳細を追加します。 bashファイルへの変更を有効にするには、次のコマンドを使用してsourceそれらを変更します

    source ~/.bashrc
    

    または

    source ~/.bash_profile
    

PS。また、bash補完と同じように[Tab]を2回押すことで、可能makeターゲットを表示する機能が追加されました。 [Tab]を2回入力する前に、makeコマンドの後にスペースを追加してください。

41
Cibin Joseph

これは少なくともDebian Lennyではデフォルトのようです:

$ grep Makefile /etc/bash_completion
    # make reads `GNUmakefile', then `makefile', then `Makefile'
    Elif [ -f ${makef_dir}/Makefile ]; then
        makef=${makef_dir}/Makefile
    # before we scan for targets, see if a Makefile name was
    # deal with included Makefiles

このファイルのヘッダーは次のように述べています。

#   The latest version of this software can be obtained here:
#
#   http://bash-completion.alioth.debian.org/
#
#   RELEASE: 20080617.5
2
mvds

ほとんどすべてのOSで利用可能な bash-completion という便利なパッケージがあります。 Makefileの完了が含まれます。

(macOSと Homebrew を使用している場合は、brew install bash-completionから取得できます。)

2
Paul Bissex