当操作系统上安装了多个版本时,如何让autoconf查找和使用程序的正确版本?

问题描述

我正在尝试修改现有的configure.ac文件。我想在FreeBSD系统上编译一些软件。基本系统包括binutils 2.17.5,但是我也从端口安装了较新的binutils 2.33.1。因此,系统上存在相同软件的多个版本。我希望autoconf使用位于2.3.3.1版本的/ usr / local / bin / as处的汇编程序,但是当前它在/ usr / bin / as处找到并使用旧的2.17.5版本的汇编程序。结果,该软件无法编译。

由于用户可以在Linux,FreeBSD或其他OS上运行autoconf,因此配置阶段必须足够灵活以找到正确的版本,而不管操作系统是什么—不仅仅是我正在使用的FreeBSD系统

当前代码段是

AC_CHECK_PROGS([AS],[i386-elf-as as])
if test -z "$AS"; then
  AC_MSG_ERROR(as not found)
fi

如何修改此configure.as文件以获得所需的结果?

解决方法

AC_CHECK_PROGS完全按照its docs的说明进行操作:它将在路径中查找指定的程序名称​​ 。但是,如果您要使用的工具不同于路径搜索会发现的工具,则文档也会说

可以通过设置variable变量来覆盖此测试的结果

换句话说,如果configure在其环境中找到预定义的变量AS,则它将使用该变量而不是执行搜索。 configure --help的输出甚至应在有影响力的环境变量中提及AS。这是一种机制,使用户可以覆盖configure的默认选择。

您完全不需要修改configure即可实现。

此外,关于

由于用户可能在Linux,FreeBSD或其他操作系统上运行autoconf 操作系统,配置阶段需要足够灵活才能找到 不论使用什么操作系统,都可以使用的正确版本-不仅仅是 我正在使用的FreeBSD系统。

很少在同一系统上安装多个版本的工具,例如as,并且使用非默认工具(根据系统的默认路径判断)构建软件是一项专家活动。 。因此,我认为过度尝试过度尝试自动选择合适的组装程序是一种练习。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...