You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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}])
])

使用说明

  1. 在configure.ac中调用该宏:
    ADDITIONAL_FOLDER
    
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:20:28