如何列出make中的所有目标?

如何列出make中的所有目标?

假设您有一个包含大量 Makefile 的项目结构,并且有一个包含所有其他 Makefile 的顶级 Makefile。

如何列出所有可能的目标?

我知道写作

make 

然后按 Tab 键获取建议通常就可以解决问题,但在我的例子中,有 10000 个目标。这样做会将结果传递给更多的并且由于某种原因滚动列表会导致冻结。还有别的办法吗?

答案1

这是 bash 补全模块make获取其列表的方式:

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

它打印出以换行符分隔的目标列表,而不进行分页。

答案2

FreeBSD 和 NetBSD make(1) 有一个名为 的内置变量.ALLTARGETS。你可以像这样打印出它的内容

make -V .ALLTARGETS

不幸的是,这会打印出一个以空格分隔的列表。我发现以下内容更有用

make -V .ALLTARGETS | tr ' ' '\n'

它在自己的行上打印出每个目标。

答案3

这是脚本功能的非常简化的版本bash-completion

make -npq : 2> /dev/null | \
    awk -v RS= -F: '$1 ~ /^[^#%.]+$/ { print $1 }'

相关内容