【问题标题】:how to print all the prerequisites and build rules for a target using make如何使用 make 打印目标的所有先决条件和构建规则
【发布时间】:2013-10-29 00:43:13
【问题描述】:

一个大项目通常有一个复杂的 Makefile 系统。有很多变量定义和目标先决条件依赖分散在不同的 Makefile 中。有什么方便的方法可以打印目标的所有先决条件和构建规则?

具体来说,两个问题:

问题 1

假设我有四个 Makefile:

Makefile1:

p: a b
    [some rule]

Makefile2:

q: c d
    [some rule]

Makefile3:

r: e f
    [some rule]

生成文件:

all: p q r
    [some rule]

我可以调用一些命令来获得类似于以下的输出吗?

all: a b c d e f
    [rule 1]
    [rule 2]
    [rule 3]
    ......

问题 2

而且,如果我要检查的实体只是一个普通的二进制文件而不是 Makefile 中指定的目标怎么办?例如,如何在 coreutils 中获取 sha1sum 的先决条件和构建规则? (很明显,在 coreutils 的 Makefile 中没有名为 sha1sum 的目标。)

我查看了make 的帮助和手册,但没有成功。也许我没有弄清楚谷歌搜索的正确关键字。谁能帮我?谢谢!

【问题讨论】:

  • 我不确定这是否会从其他 Makefile 中获取先决条件,但将其添加到目标会打印目标和先决条件:@echo $@:$^
  • @cmotley 我试过了,但结果表明该规则没有从其他 Makefile 中获取先决条件。总之感谢!你对第二个问题有什么想法吗?这实际上是我需要的。
  • make -n 可能是部分解决方案。但它确实会丢失特定的目标信息,并且只会打印配方。
  • @ClaytonStanley 是的。现在我可以递归地使用make -ngrep 作为部分解决方案。谢谢!

标签: gnu-make


【解决方案1】:

我对这个问题有点不清楚,但是您是否尝试过 -p 选项。它打印解析 makefile 生成的 DAG 并打印规则、依赖项和变量值

任何构建甚至是复杂的构建都遵循构建目标的相同原则。从您的示例中,不清楚的是依赖关系 a 和 b 例如是如何构建的。最终目标是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    相关资源
    最近更新 更多