autoconf:m4:多次传递参数

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

我需要像这样多次将参数传递给我的./configure:

./configure [...] --with-folder=/path/to/folder1 --with-folder=/path/to/folder2

并将路径作为列表存储在变量中,稍后我将在 makefile 中使用。

我尝试过这个:

AC_DEFUN([ADDITIONAL_FOLDER],[

AC_MSG_CHECKING([for additional folder])
AC_ARG_WITH([folder],
    [AS_HELP_STRING([--with-folder=DIR],
    [specify additional folder])],
    [
        dnl Check if correct path was passed.
        DIR="$(realpath "${withval}")"
        if test ! -d "${DIR}"; then
            AC_MSG_ERROR([incorrect folder])
        fi
    ])

AC_SUBST([FOLDERS],["${FOLDERS} ${DIR}"])
AC_MSG_RESULT([${FOLDERS}])
])

但到目前为止我还无法告诉 autoconf 这样做!可能吗?如何实现?

autoconf m4
1个回答
0
投票

我需要纠正我的评论,这可能是“不可能的”。

但是,虽然您可以实现此类选项处理,但您需要在

"$@"
之后直接在sh代码中自己处理
AC_INIT
,而不影响此后发出shell代码的任何标准宏。

请参阅https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.72/html_node/Initializing-configure.html的最后一段:

如果您的配置脚本执行自己的选项处理,则应在调用 AC_INIT 后立即检查 '$@' 或 '$',因为其他 Autoconf 宏随意使用 set 命令来处理字符串,这会产生更新 ' $@' 和 '$'。但是,我们建议您使用 AC_ARG_ENABLE 等标准宏,而不是尝试实现自己的选项处理。请参阅站点配置。

因此,可以只处理“$@”中的

--with-folder
参数并将值保存在某处,并将其余选项保留在“$@”中以供标准 Autoconf 生成的代码处理。不过,这听起来并不容易实现:

  • 迭代
    $@
  • 如果参数为
    --with-folder=foo
    ,则将
    foo
    添加到
    FOLDERS
    并从
    $@
  • 中删除参数
  • 如果参数是其他内容,请将参数保留在
    $@

所以我还是更喜欢类似于

--with-folders=folder1,folder2,folder3
的东西

FOLDERS=""
AC_ARG_WITH([folders],
    [AS_HELP_STRING([--with-folders=DIR,...],
                    [specify additional folders])],
    [
       saved_IFS="$IFS"
       IFS=","
       for dir in ${withval}; do
         IFS="$saved_IFS"
         if test -d "$dir"; then
           AC_MSG_CHECKING([for additional folders])
           absdir="$(cd "$dir" && pwd)"
           AC_MSG_RESULT([$absdir])
           FOLDERS="$FOLDERS $absdir"
         else
           AC_MSG_ERROR([invalid folder: $dir])
         fi
       done
       IFS="$saved_IFS"
    ])
AC_SUBST([FOLDERS])

(就像问题中的示例一样)仅适用于路径中任何地方都没有空格的文件夹。

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