【Linux】【编译】automake 调试方法小结

  • 由 automake 生成的规则和依赖树可能会相当复杂,当事情未按预期运行时,会让开发者感到困惑。除了 make 命令提供的调试选项(请参阅《GNU Make 手册》中的 “选项总结” 部分)之外,这里还有一些关于有效调试由 automake 生成的 makefile 的进一步提示:

非静默输出

  • 如果在软件包中使用了静默规则(请参阅 Automake 如何帮助 Make 保持静默),启用了较少的冗余输出,则可能需要撤销静默规则并查看实际运行的命令:请参阅取消静默 Automake。

非静默Automake

  • 有了AM_SILENT_RULES 宏,Automake 可以很好地将 make 输出减少到最低限度。有时你想看到更多信息,尤其是在调试时。让我们总结一下从 Automake 软件包中获取更多信息的方法:
  • 运行 make V=1 会产生详细的输出。
  • 添加 AM_V_GEN= AM_V_at= 将取消更多规则。因此,总的来说:
    make V=1 AM_V_GEN= AM_V_at=
  • 即使这样做也不能消除所有规则。要查看执行内容的真实情况,请使用 GNU Make的调试功能:make --debug=p … otherargs … 这将报告正在运行的每一条命令,忽略规则上的 @前缀(这是使它们静默的原因)。就 Automake 而言,这些命令一般都是复杂的 shell 结构,你需要在 Automake中找到源文件才能真正理解它们;但至少你有了可以搜索的文本。你可能希望加入其他调试选项。请参阅《GNU Make 手册》中的选项摘要部分。

make -n

  • 使用 make -n 可以在不实际执行操作的情况下展示将会执行的内容。不过,这仍然会执行以 “+” 为前缀的命令,并且在使用 GNU make 时,还会执行包含字符串 “$(MAKE)"或{MAKE}” 的命令(请参阅《GNU make 手册》中的 “替代执行” 部分)。
  • 一般来说,这对于展示递归规则将会执行的操作很有帮助,但这也意味着,在你自己编写的规则中,不应将此类递归操作与任何会修改文件的动作混合使用。此外,即使使用了 -n 选项,GNU make 仍会更新 Makefile 文件本身的前置条件(请参阅《GNU make 手册》中的 “重新生成 Makefile” 部分)。

SHELL

make SHELL="/bin/bash -vx"

有助于调试复杂的规则。请参阅《Autoconf 手册》中的 “Make 宏 SHELL”,了解与此结构相关的一些可移植性问题。

print

echo 'print: ; @echo "$(VAR)"' | make -f Makefile -f - print 

可以方便地检查变量的扩展值。如果 “print ”已被使用或已存在以该名称命名的文件,则可能需要使用 “print ”以外的目标。

remake

  • remake 提供了一个经过修改的 GNU make 命令,名为 remake。它能够处理复杂的GNU make 专用 Makefile,并可以像调试器一样交互式地跟踪执行情况、检查变量和调用规则。。

如本文对你有些许帮助,欢迎大佬支持我一下(点赞+收藏+关注、关注公众号等),您的支持是我持续创作的竭动力
支持我的方式

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花神庙码农

你的鼓励是我码字的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值