在configure.ac的“ test”语句中指定通配符或正则表达式的最佳方法是什么?

问题描述 投票:0回答:1

我正在为gnu自动工具编写configure.ac脚本。在我的代码中,我有一些if test语句,我想根据编译器名称设置标志。我的原始测试如下所示:

if test "x$NETCDF_FC" = xifort; then

但是有时编译器名称会更复杂(例如mpifortmpiifort,前缀的路径等),因此我想检查字符串ifort是否包含在变量[C0中]。

据我所知,要使用通配符或正则表达式进行比较,我不能使用$NETCDF_FC,而需要使用双括号test。但是,当[[ ]]configure.ac解析以创建autoconf时,方括号被视为引号,因此将其一级从输出中删除。我唯一可以使用的解决方案是在configure.ac中使用三括号,如下所示:

configure

我正确执行此操作吗?是否将其视为if [[[ $NETCDF_FC =~ ifort ]]]; then 的最佳做法,还是有其他方法?

regex testing autoconf
1个回答
0
投票

使用configure.ac语句。直接作为shell代码:

case

或作为m4sh代码:

case "$NETCDF_FC" in
    *ifort*)
        do_whatever
        ;;
    *)
        do_something_else
        ;;
esac

我不想依靠能够解释AS_CASE([$NETCDF_FC], [*ifort*], [do_whatever], [do_something_else]) 运行时出现的[[ ]][[[ ]]]的外壳程序(您需要使用configure进行转义以使双括号或三括号括起来)配置)。

[如果您需要区分大小写模式中的字符类(例如[]),我建议您检查生成的*[a-z]ifort*文件中的configure语句模式,该模式最终会被使用,直到您有足够的空间为止case引号在源[]文件中的模式周围添加。

[请注意,显式configure.ac语句通常在case模式之前的行尾包含# ( shell注释,以避免编辑者对不匹配的开/关括号感到困惑。

© www.soinside.com 2019 - 2024. All rights reserved.