在这个问题之后,我正在调试一个传统构建系统,并且需要了解如何从其
configure
m4源生成生成的configure.ac
脚本的特定部分。具体来说,我试图追溯 configure
脚本中以下 bash 代码块的来源:
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
exec 5>>config.log
{
echo
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
printf "%s\n" "$ac_log"
} >&5
如此处所述。
autoconf
和 autom4te
有一个 --trace
选项,可用于找出 configure.ac
文件的哪一部分导致到这个生成的脚本部分。但是,我不确定如何有效地使用此 --trace
选项来实现此目的。
有人可以指导我使用
--trace
选项(或任何其他方法)来确定 configure.ac
中的哪个 m4 宏展开以在 configure
脚本中生成此特定的 bash 代码块吗?
对此的任何帮助或见解将不胜感激,因为它将帮助我理解并可能修改该项目的构建配置。
我了解到
和autoconf
有一个autom4te
选项,可用于确定--trace
文件的哪一部分通向此生成的脚本部分。但是,我不确定如何有效地使用此configure.ac
选项来实现此目的。--trace
忽略
autom4te
。它是前端Autotools使用的一个支持工具,并不是真正供你直接使用的。您可以通过运行 autoconf
和 its --trace
选项来利用它。
但我看不出有什么办法可以达到你的目的。
--trace
选项提供有关您指定的特定宏的调用的信息,告诉您这些宏的使用位置。如果您已经知道哪些宏参与生成您正在查看的文本,那么这可能会很有趣,但这就是您想要找出的内容。
解决该问题的更好的初始方法可能是 m4 版本的打印语句调试。请记住,
configure
是通过扩展configure.ac
中出现的宏而生成的。 configure.ac
中任何不是宏或 m4 指令的内容都将作为文字文本传递到 configure
。因此,您可以将特征文字命令放入 configure.ac
中,您将在生成的 configure
中识别这些命令。您可以考虑使用带有特征参数的 echo
或 printf
命令,这样您不仅可以通过检查 configure
脚本,还可以通过运行它来获取信息。
您也许可以通过跟踪
configure.ac
到 configure
中已有的详细信息来执行类似操作,但这可能无法提供您想要的粒度。