我需要像这样多次将参数传递给我的./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 这样做!可能吗?如何实现?
我需要纠正我的评论,这可能是“不可能的”。
但是,虽然您可以实现此类选项处理,但您需要在
"$@"
之后直接在sh代码中自己处理AC_INIT
,而不影响此后发出shell代码的任何标准宏。
如果您的配置脚本执行自己的选项处理,则应在调用 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])
(就像问题中的示例一样)仅适用于路径中任何地方都没有空格的文件夹。