从命令获取 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:
我使用以下代码获取 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: