我有几个名称相同但版本或位置不同的编译器。
./configure
脚本似乎在PATH
找到的第一个脚本处停止。如何根据自定义规则告知Automake选择其中一个?我已经有一个可以检查编译器版本的宏。
我想避免手动设置路径(使用FC
变量),因为每次输入整个路径都很麻烦。
在我的例子中,几个MPI包装器编译器位于具有相同名称的不同目录中(并由用户添加到PATH
)。
这个想法是使用./configure --with-intel
之类的东西来查找和选择IntelMPI编译器。
答案 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
中推荐的如果您需要检查程序的行为以及确定它是否存在,您必须为它编写自己的测试。