【问题标题】:Get makefile command evaluation as text以文本形式获取 makefile 命令评估
【发布时间】:2019-11-22 17:00:20
【问题描述】:

我有以下问题。基本上我有一个很长的 Makefile,它调用了许多复杂的命令。它使用环境变量,其他 Makefile 中包含的方法,真的很难阅读 bash 魔术。所以例如我有一个命令(不能把真正的放在这里,对不起)是这样的:

foo ${bar} (sort ...) [...]

我正在分析这个 Makefile,我想知道运行它时究竟执行了什么。我想要实现的是文本表示中的这个命令,所以所有的东西都会被评估,我实际上可以看到像gcc something -Isomethingmore这样正在执行什么(所以命令foo ${bar} (sort ...) [...]实际上意味着gcc something -Isomethingmore)等等。是有办法吗?所以我可以例如回应它,看看我在处理什么?

【问题讨论】:

  • 如果 GNU make,make -dmake --trace。另外,make SHELL='/bin/sh -x'。参看。 stackoverflow.com/questions/5820303/…
  • 如果我只想要一个命令?因为他们很多,我的终端会有点乱

标签: bash makefile


【解决方案1】:

默认情况下,make 会打印它执行的配方。所以你应该在标准输出中看到确切的命令。使用grep 可能会隔离您感兴趣的那个。如果make 没有打印食谱,它可能是:

  1. 因为配方以 @ 为前缀,这告诉 make 对此配方保持沉默,
  2. 因为 Makefile 包含 .SILENT special target,它可以使所有配方静音。

删除其中一个,您应该会在执行时看到配方。

【讨论】:

  • recpe 你的意思是,我不知道foo: gcc bar,我应该在foo 之前添加@
  • @dabljues,配方是包含要执行的命令的规则的一部分。您展示的不是那个,而是指定要构建的目标及其先决条件的部分。这可能是某些规则的全部内容,在这种情况下,要么(1)规则仅用于确保构建先决条件,要么(2)配方以不同的规则呈现以构建相同的目标,并且没有配方只是命名额外的先决条件。
  • 好的,这说明了一切。谢谢!
猜你喜欢
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 2013-05-21
  • 2011-03-25
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多