如何在Autoconf中多次传递--with-folder参数并存储路径列表?
实现多次传递
--with-folder参数并存储为列表变量 你的需求完全可行,原代码的问题在于AC_ARG_WITH默认只会保留最后一次传入的参数值,且变量累加逻辑存在疏漏,以下是修正后的实现方案:
修正后的宏代码
AC_DEFUN([ADDITIONAL_FOLDER],[ # 初始化FOLDERS变量,避免首次为空时出现多余空格 test -z "${FOLDERS}" && FOLDERS="" AC_MSG_CHECKING([for additional folders]) AC_ARG_WITH([folder], [AS_HELP_STRING([--with-folder=DIR], [specify additional folder (can be used multiple times)])], [ # 处理路径:优先用realpath,无则用readlink -f兼容更多系统 if command -v realpath >/dev/null 2>&1; then DIR="$(realpath "${withval}")" elif command -v readlink >/dev/null 2>&1; then DIR="$(readlink -f "${withval}")" else AC_MSG_ERROR([neither realpath nor readlink found, cannot resolve path]) fi # 检查路径是否为有效目录 if test ! -d "${DIR}"; then AC_MSG_ERROR([folder ${DIR} is not a valid directory]) fi # 将合法路径追加到FOLDERS列表 FOLDERS="${FOLDERS} ${DIR}" ]) # 移除列表开头的多余空格 FOLDERS=$(echo "${FOLDERS}" | sed 's/^ //') # 将变量导出给Makefile使用 AC_SUBST([FOLDERS]) AC_MSG_RESULT([${FOLDERS}]) ])
使用说明
- 在
configure.ac中调用该宏:ADDITIONAL_FOLDER - 在
Makefile.am(或生成的Makefile)中使用FOLDERS变量:# 遍历所有文件夹添加到编译包含路径 INCLUDES += $(foreach dir,$(FOLDERS),-I$(dir)) # 打印所有额外文件夹路径 show_folders: @echo "Additional folders: $(FOLDERS)"
关键修正点
- 初始化
FOLDERS变量,避免首次追加时出现开头空格 - 兼容无
realpath的系统,用readlink -f作为替代方案 - 在
AC_ARG_WITH回调中每次追加新路径,而非覆盖原有值 - 移除列表开头的多余空格,保证变量格式整洁
- 在帮助文本中明确标注参数可多次使用
内容的提问来源于stack exchange,提问作者luca
相关产品推荐
相关产品推荐

