- 🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)
- 🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd
- 🌐系列专栏:Linux技术
- 📰如觉得博主文章写的不错或对你有所帮助的话,还望大家三连支持一下呀!!! 👉关注✨、点赞👍、收藏📂、评论。
- 如需转载请参考转载须知!!
- 由 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”,了解与此结构相关的一些可移植性问题。
echo 'print: ; @echo "$(VAR)"' | make -f Makefile -f - print
可以方便地检查变量的扩展值。如果 “print ”已被使用或已存在以该名称命名的文件,则可能需要使用 “print ”以外的目标。
remake
- remake 提供了一个经过修改的 GNU make 命令,名为 remake。它能够处理复杂的GNU make 专用 Makefile,并可以像调试器一样交互式地跟踪执行情况、检查变量和调用规则。。
如本文对你有些许帮助,欢迎大佬支持我一下(点赞+收藏+关注、关注公众号等),您的支持是我持续创作的竭动力
支持我的方式