0

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

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

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

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

4

2 回答 2

1

CC我的解决方案是通过 shell 脚本设置和其他“宝贵”变量,其中很多用于交叉编译。所以我有一堆 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 ...
于 2012-11-08T19:12:36.743 回答
0

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

#!/bin/bash

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

注意:这是手册中推荐的

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

于 2012-11-08T09:24:45.437 回答