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

Sog*_*tar 33 make

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

你怎么能列出所有可能的目标?

我知道写作

make 
Run Code Online (Sandbox Code Playgroud)

然后点击获取建议通常可以解决问题,但在我的情况下有 10000 个目标。这样做会传递更多结果,并且由于某种原因滚动列表会导致冻结。还有其他方法吗?

Chr*_*own 44

这是 bash 完成模块make获取其列表的方式:

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

它打印出以换行符分隔的目标列表,无需分页。

  • 也许添加``| sort -u`` 对其进行排序并删除重复项 (5认同)

Jos*_*iro 6

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

make -V .ALLTARGETS
Run Code Online (Sandbox Code Playgroud)

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

make -V .ALLTARGETS | tr ' ' '\n'
Run Code Online (Sandbox Code Playgroud)

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