如何在 GNU Make 中从外部列出先决条件?

如何在 GNU Make 中从外部列出先决条件?

如何从 GNU Make makefile 查询目标的先决条件?

例如,如果目标指定如下:

fred: wilma barney betty

我想打印fred这样的先决条件:

$ make some_action fred
wilma barney betty

答案1

也许您正在寻找试运行?

make --dry-run fred

手册页为我们提供了有关试运行的信息:

-n, --just-print, --dry-run, --recon
  Print the commands that would be  executed,  but  do  not 
  execute them.

所以它不会给你一个直接列表,而是一个间接列表,因为你知道他想要执行他所依赖的东西。

答案2

另一种可能性是“打印数据库”选项,尽管它会为您提供比您想要的更多的信息。从手册中:

   ‘-p’
   ‘--print-data-base’
      Print the data base (rules and variable values) that results from reading the
      makefiles; then execute as usual or as otherwise specified. This also prints the
      version information given by the ‘-v’ switch (see below). To print the data base
      without trying to remake any files, use ‘make -qp’. To print the data base of
      predefined rules and variables, use ‘make -p -f /dev/null’. The data base output
      contains file name and line number information for recipe and variable
      definitions, so it can be a useful debugging tool in complex environments.

不过,公平的警告是:仔细检查这个烂摊子将要未经后期处理就变得残酷。

答案3

假设你的 Makefile 是这样的:

.PHONY: wilma barney betty fred: wilma barney betty

最新版本翻拍有一个--profile输出数据的选项,可以将其转换为检查的依赖关系图。数据文件输出格式是 callgrind 使用的格式,因此需要另一个程序来根据输出的数据生成图表。看https://github.com/rocky/remake/tree/master/profile

在旧版本的重制中,您可以使用以下方法获取依赖项

$重制-X -f 生成文件
GNU Make 4.1+dbg0.91
专为 x86_64-unknown-linux-gnu 构建
版权所有 (C) 1988-2014 自由软件基金会, Inc.
版权所有 (C) 2015 洛基·伯恩斯坦。
许可证 GPLv3+:GNU GPL 版本 3 或更高版本
这是免费软件:您可以自由更改和重新分发它。
在法律允许的范围内,不提供任何保证。
正在读取生成文件...
更新 makefile....
更新目标....
 文件“fred”不存在。
   文件“wilma”不存在。
  必须重做目标“威尔玛”。
  成功重制目标文件“wilma”。
<- (/tmp/??:0)
威尔玛
重制<0>目标弗雷德·依赖

弗雷德:威尔玛·巴尼·贝蒂
重拍<1>辞职
重制版:就这样了,各位……

如果将发出的这些命令放入文件中,请说cmds.txt

target fred depend quit

然后你可以运行:

cat cmds.txt | remake -X -f Makefile

我将如何做一些更复杂的事情作为练习,例如编写采用依赖项名称并运行上述内容的程序。

相关内容