我使用下面的代码来获取一个makefile目标列表,该列表在大多数情况下都可以正常工作,但是当您使用这样的makefile时,您只会得到两个目标,而并非全部。
cat 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($1,A,/ /);for(i in A)print A[i]}' `;
可能是什么问题?
我尝试了有目的的解决方案,但它提供了一个错误:
make -qp | grep '^[a-z0-9-]\+:'
可能是什么问题?
问题在于此正则表达式:
/^[a-zA-Z0-9][^$#\\\/t=]*:([^=]|$)/
与目标名称中的连字符(-
)不匹配。无关紧要的是,awk
是一个笨拙的工具,可用于显示您实际上正在使用的工具; grep
会更易于使用:
make -qp | grep '^[a-z0-9-]\+:'
,产生输出
command:
command2:
another-command: