makeファイルを含むZshを使用してGNU Makeターゲットを完成させます。

makeファイルを含むZshを使用してGNU Makeターゲットを完成させます。

GNUメイク 4.3+

オペレーティングシステム:Mac

.zshrcファイルに以下を追加した後、このテキストファイルのインクルードルールmakeに対してターゲットレベルでMakefile (or 'makefile')オートコンプリートを作成できました。

zstyle ':completion:*:*:make:*' tag-order 'targets'
autoload -U compinit && compinit

ただし、コマンドをサブファイルにグループ化してinclude *.mkメカニズムを介して含めると、zsh正しいオートコンプリートステートメントは生成されなくなります。ただトップレベルの makefile で定義されたターゲットを出力します。


正確なファイル構造:

├── install-brew
├── install-oh-my-zsh
├── install-pathogen
├── makefile
├── mk
│   ├── get.mk
│   ├── notes.mk
│   ├── setup.mk
    ...

そしてmakefile

include mk/*.mk

foo:
  echo foo

bar:
  echo bar

> make [tab]生産する:

> make foo
foo bar

そしてmake get-brew

if [ -z `command -v brew` ]; then ./install-brew; else echo "brew detected: `command -v brew`" >&2; fi

(だからmakefileが動作しています)


zshmakeファイルにサポートmakeファイルが含まれていても、makeファイルからカスタムターゲットの完全なリストを生成するように設定するにはどうすればよいですか?

答え1

zstyle ':completion:*:make:*:targets' call-command true
zstyle ':completion:*:*:make:*' tag-order 'targets'

レベル2のmakefile "include"の場合、これは私にとって効果的でした。 .zshrcファイルに追加するだけです。源泉:https://github.com/zsh-users/zsh-completions/issues/813#issuecomment-902592371

GNUが検出されると、make完了呼び出しが発生し、可能な宛先のリストを決定するのに役立ちます。make -nsp --no-print-directory --always-makemakemake

昔は無条件だったけどzstyle2001年条件付設定に変更makeこれを呼び出すのは結局費用がかかり、潜在的に危険な作業になる可能性があるからです。

スタイルの説明を見つけるcall-commandことができます。info zsh call-command:

call-command

makeこのスタイルは、一致を生成するためにコマンドを直接呼び出すと速度が遅くなる antなどの問題が発生したり、makeの場合はmakefileのジョブを実行できるなどのコマンド機能に使用されます。 「true」に設定すると、このコマンドが呼び出され、一致を生成します。このスタイルのデフォルト値は「false」です。

関連情報