从命令获取 GNU makefile 目标

Get GNU makefile targets from command

我使用以下代码获取 makefile 目标列表,这在大多数情况下都可以正常工作,但是当您像这样使用 makefile 时,您只会获得两个目标,而不是全部。

Makefile

command: ## Command description
    @echo "Execution log"

another-command: ## Command description
    @echo "Execution log"

command2: ## Command description
    @echo "Execution log" 

输出为:

command
command2

我不明白为什么我没有收到命令another-command, 这是代码

`make -qp | awk -F':' '/^[a-zA-Z0-9][^$#\\/t=]*:([^=]|$)/ {split(,A,/ /);for(i in A)print A[i]}' `;

可能是什么问题?

我尝试了有目的的解决方案,但它提供了一个错误:

make -qp | grep '^[a-z0-9-]\+:'

what could be the problem ?

问题是这个正则表达式:

/^[a-zA-Z0-9][^$#\\/t=]*:([^=]|$)/

不匹配其中包含连字符 (-) 的目标名称。作为一个无关紧要的问题,awk 是一个笨拙的工具,实际上你似乎在用它做什么; grep 使用起来会更简单:

make -qp | grep '^[a-z0-9-]\+:'

,产生输出

command:
command2:
another-command: