次のような単純なmakefileがあるとします。
hello:
echo "hello world"
bye:
echo "bye bye"
次に、bashでは次のようなものが必要です:
作る<タブ>
だからそれは完了することができます
こんにちは
空のファイルhello
とbye
を作成するような簡単な方法を見つけましたが、もっと何かを探しています洗練された。
これはあなたが探しているものでしょうか?
http://freshmeat.net/projects/bashcompletion/
make [Tab]はMakefileのすべてのターゲットで完了します。このプロジェクトは、最も一般的なLinux/UNIXコマンド用のプログラム可能な完了ルーチンを作成し、システム管理者やプログラマーが毎日行う必要のある入力の量を削減するために考案されました。
これを〜/ .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形式に配置します。
警告と落とし穴:
Makeファイルの名前は「GNUMakefile」、「makefile」、または「Makefile」以外です。このようなタイトルに頻繁に遭遇する場合は、上記と同じ形式で、目的のメイクファイルタイトルを〜/ .bashrcまたは〜/ .bash_profileファイルの「Makefile」の場所に追加して、行を追加してください。
変更後、〜/ .bash_profileまたは〜/ .bashrcファイルを読み込むのを忘れます。初心者には馴染みがないので、一見取るに足らない詳細を追加します。 bashファイルへの変更を有効にするには、次のコマンドを使用してsourceそれらを変更します
source ~/.bashrc
または
source ~/.bash_profile
PS。また、bash補完と同じように[Tab]を2回押すことで、可能makeターゲットを表示する機能が追加されました。 [Tab]を2回入力する前に、makeコマンドの後にスペースを追加してください。
これは少なくとも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
ほとんどすべてのOSで利用可能な bash-completion という便利なパッケージがあります。 Makefileの完了が含まれます。
(macOSと Homebrew を使用している場合は、brew install bash-completion
から取得できます。)