Bash 以文本形式获取makefile命令求值

Bash 以文本形式获取makefile命令求值,bash,makefile,Bash,Makefile,我有以下问题。基本上我有一个很长的Makefile,它调用许多复杂的命令。它使用环境变量,从其他makefile中包含的方法,非常难以阅读bash magic。例如,我有一个命令(抱歉,无法将真实的命令放在这里),如下所示: foo${bar}(排序…[…] 我正在分析这个Makefile,我想知道在运行它时执行的是什么。我想要实现的是文本表示中的这个命令,因此所有内容都会得到评估,我可以看到执行的确切内容,比如gcc something-Isomethingmore(因此命令foo${bar

我有以下问题。基本上我有一个很长的Makefile,它调用许多复杂的命令。它使用环境变量,从其他makefile中包含的方法,非常难以阅读bash magic。例如,我有一个命令(抱歉,无法将真实的命令放在这里),如下所示:

foo${bar}(排序…[…]

我正在分析这个Makefile,我想知道在运行它时执行的是什么。我想要实现的是文本表示中的这个命令,因此所有内容都会得到评估,我可以看到执行的确切内容,比如
gcc something-Isomethingmore
(因此命令
foo${bar}(sort…[…]
实际上意味着
gcc something-Isomethingmore
)等等。有没有办法做到这一点?例如,我可以回显它,看看我在处理什么?

默认情况下,make打印它执行的配方。因此,您应该在标准输出中看到确切的命令。使用
grep
也许可以分离出您感兴趣的一个。如果make未打印配方,则可能是:

  • 因为配方的前缀是
    @
    ,这告诉make对此配方保持沉默
  • 因为Makefile包含使所有配方静音的

  • 删除一个或另一个,执行时应该会看到配方。

    默认情况下,make会打印它执行的配方。因此,您应该在标准输出中看到确切的命令。使用
    grep
    也许可以分离出您感兴趣的一个。如果make未打印配方,则可能是:

  • 因为配方的前缀是
    @
    ,这告诉make对此配方保持沉默
  • 因为Makefile包含使所有配方静音的

  • 删除一个或另一个,您应该在执行时看到配方。

    如果GNU make,
    make-d
    make-trace
    。另外,
    makeshell='/bin/sh-x'
    。如果我只想要一个命令?因为它们很多,如果GNU制造,
    make-d
    make-trace
    ,我的终端会有点乱。另外,
    makeshell='/bin/sh-x'
    。如果我只想要一个命令?因为它们很多,而且我的终端会有点乱,你是说,我不知道foo:gcc bar,我应该在foo?@dabljues之前添加
    @
    ,配方是包含要执行的命令的规则的一部分。您展示的并不是这个,而是指定要构建的目标及其先决条件的部分。这可能就是某些规则的全部内容,在这种情况下,(1)该规则仅用于确保构建了先决条件,或者(2)在构建同一目标的不同规则中提供了配方,而没有配方的规则只是命名了其他先决条件。好的,这澄清了一切。谢谢recpe的意思是,我不知道foo:gcc bar,我应该在foo?@dabljues之前添加
    @
    ,配方是包含要执行的命令的规则的一部分。您展示的并不是这个,而是指定要构建的目标及其先决条件的部分。这可能就是某些规则的全部内容,在这种情况下,(1)该规则仅用于确保构建了先决条件,或者(2)在构建同一目标的不同规则中提供了配方,而没有配方的规则只是命名了其他先决条件。好的,这澄清了一切。谢谢