如何在Automake中选择编译器版本?

时间:2012-11-07 22:02:29

标签: configure autoconf automake

我有几个名称相同但版本或位置不同的编译器。 ./configure脚本似乎在PATH找到的第一个脚本处停止。如何根据自定义规则告知Automake选择其中一个?我已经有一个可以检查编译器版本的宏。

我想避免手动设置路径(使用FC变量),因为每次输入整个路径都很麻烦。

在我的例子中,几个MPI包装器编译器位于具有相同名称的不同目录中(并由用户添加到PATH)。

这个想法是使用./configure --with-intel之类的东西来查找和选择IntelMPI编译器。

2 个答案:

答案 0 :(得分:1)

我的解决方案是通过shell脚本设置CC和其他“珍贵”变量,其中许多用于交叉编译。所以我有一堆shell脚本,其中包含以下内容:

export CROSS_COMPILE=arm-linux
export CC=${CROSS_COMPILE}-gcc
...
PATH=$PATH:/some/arm/compiler/bin:/some/arm/compiler/usr/bin # for arm compiler tools
export CFLAGS="..."

设置configure配置。所以在配置时我做:

source /path/to/configuration/some-arm-compiler.sh
./configure ...

它节省了大量的打字。

编辑:所以它可以适用于您的特定情况:

<强> mpi-a.sh

export FC=mpif90
PATH=$PATH:/path/to/mpi-a/bin:/path/to/mpi-a/usr/bin

<强> mpi-b.sh

export FC=mpif90
PATH=$PATH:/path/to/mpi-b/bin:/path/to/mpi-b/usr/bin

所以用其中一个进行编译:

source /path/to/mpi-a.sh
./configure ...

和另一个:

source /path/to/mpi-b.sh
./configure ...

答案 1 :(得分:0)

我的解决方案:使用自定义匹配条件在宏中复制configure的搜索策略。解析PATH是通过设置IFS变量(已在configure中定义)来完成的。在Bash中,查找所有可执行文件将类似于:

#!/bin/bash

IFS=":"
exe="mpif90"
for dir in $PATH
do
   if test -f "$dir/$exe"; then
     custom_test($dir/$exe)
   fi
done

注意:这是manual

中推荐的
  

如果您需要检查程序的行为以及确定它是否存在,您必须为它编写自己的测试。