在 Autoconf M4 脚本中确定目标架构

Determining the target architecture in an Autoconf M4 script

我目前正在使用一个需要构建 i686 和 x86_64 库的系统,在同一系统上构建和安装它们 - 这是一个遗留项目,混合了较新的 ABI 不可知代码在 64 位中通常是 运行,因为它可以使用额外的内存,以及一些在为 64 位构建时会中断的旧代码。

对于 99% 的 linked 库,这没有问题;在 autoconf、rpm-build 和 pkg_config 之间,它可以毫无问题地找到正确的库。不幸的是,有一个主要例外 - MySQL。他们没有运送 pkg_config 脚本,而是有自己的自定义 mysql_config 脚本,并且它不考虑目标 ABI - 它只报告最后一个安装的值。

因此,虽然我们在 64 位上正确移植到 运行 的最后一段代码,但我正在尝试通过编辑 Autoconf MySQL 配置脚本(官方GNU one,ax_lib_mysql.m4) 根据目标平台对报告的 CFLAGS 和 LDFLAGS 进行后处理。这就是问题的症结所在——Autoconf M4 中是否有一种好方法来检测您是为 32 位还是 64 位目标构建?确切的 ABI 并不重要 - 它主要是知道我是否需要 link 反对 /usr/lib 或 /usr/lib64.

很抱歉为一个句子问题写小说,但我在网上发现了很多地方人们问如何做到这一点,但从来没有得到答案,因为每个人都忙于告诉他们他们不应该这样做这样做是因为它会使构建过程更加脆弱,所以我试图稍微准备一下。我知道这是一个可怕的 hack(非常欢迎使用其他方法!),但我需要一些方法来解决这个问题以在过渡期间保持系统构建。

我想你想要的是使用 $host_cpu$build_cpu 如果你添加 AC_CANONICAL_HOST你的配置脚本。

请参阅 autoconf 信息文档中的 Getting the Canonical System Type