自动完成功能非常适合使用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 hello
或make bye
)看到的所有目标均已注册
> make help
help This help
hello hello world
bye good bye
但是自动补全当前仅提取Makefile中的内容
> make hel
hello help
是否可以通过自动补全的方式在包含的makefile中搜索其他目标?
这可能对GNU Make 4.2.1有帮助:
_make() { COMPREPLY=($(make help | sed -E 's/^\x1B\[36m([^ ]*).*/\1/' | grep "^$2")); }
complete -F _make make