GNU 메이크 4.3+
운영 체제: 맥
.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이 작동 중입니다)
zsh
make 파일에 지원 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-make
make
make
예전에는 무조건 그랬지만zstyle
2001년 조건부 설정으로 변경make
이를 호출하는 것은 결국 비용이 많이 들고 잠재적으로 위험한 작업이 될 수 있기 때문 입니다.
스타일에 대한 설명을 call-command
찾을 수 있습니다.info zsh call-command
:
call-command
make
이 스타일은 일치 항목을 생성하기 위해 명령을 직접 호출 하면ant
속도가 느려지는 등의 문제가 발생하거나 make의 경우 makefile의 작업이 실행될 수 있는 등의 명령 기능에 사용됩니다 . "true"로 설정되면 일치 항목을 생성하기 위해 이 명령이 호출됩니다. 이 스타일의 기본값은 "false"입니다.