包含文件的Makefile的Bash自动补全功能

问题描述 投票:0回答:1

自动完成功能非常适合使用this SO post中的解决方案的单个Makefile。但是,如果我的Makefile include是其他Makefile,则自动补全功能不会选择包含的目标。

Makefile:

include other.mk

help: ## This help
    @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)

hello: ## hello world
    @echo "world"

other.mk

bye: ## good bye
    @echo "good bye"

通过运行make help(或make hellomake bye)看到的所有目标均已注册

> make help
help                           This help
hello                          hello world
bye                            good bye

但是自动补全当前仅提取Makefile中的内容

> make hel
hello  help   

是否可以通过自动补全的方式在包含的makefile中搜索其他目标?

bash makefile autocomplete
1个回答
0
投票

这可能对GNU Make 4.2.1有帮助:

_make() { COMPREPLY=($(make help | sed -E 's/^\x1B\[36m([^ ]*).*/\1/' | grep "^$2")); }
complete -F _make make
© www.soinside.com 2019 - 2024. All rights reserved.