如何跟踪哪个 `configure.ac` m4 宏扩展为 `configure` 中的特定 bash 代码块?

问题描述 投票:0回答:1

这个问题之后,我正在调试一个传统构建系统,并且需要了解如何从其

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

此处所述。

hereherehere,我了解到

autoconf
autom4te
有一个
--trace
选项,可用于找出
configure.ac
文件的哪一部分导致到这个生成的脚本部分。但是,我不确定如何有效地使用此
--trace
选项来实现此目的。

有人可以指导我使用

--trace
选项(或任何其他方法)来确定
configure.ac
中的哪个 m4 宏展开以在
configure
脚本中生成此特定的 bash 代码块吗?

对此的任何帮助或见解将不胜感激,因为它将帮助我理解并可能修改该项目的构建配置。

bash configure autotools autoconf m4
1个回答
0
投票

我了解到

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
中已有的详细信息来执行类似操作,但这可能无法提供您想要的粒度。

© www.soinside.com 2019 - 2024. All rights reserved.