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

CMake如何通用地为列表每个元素添加自定义前缀?

CMake 实现列表元素批量添加前缀(类似GNU Make的addprefix)

在CMake中无需逐个手动处理列表元素,有两种通用方式实现类似GNU Make addprefix 的功能:

方法一:字符串替换快速实现

利用CMake列表本质是空格分隔字符串的特性,通过string(REPLACE)直接给每个元素插入前缀:

set(ELIST thisdir thatdir otherdir)
set(ILIST adir bdir cdir)

# 给ELIST每个元素前加--exclude
string(REPLACE " " " --exclude " PREFIXED_ELIST "--exclude ${ELIST}")
# 给ILIST每个元素前加--include
string(REPLACE " " " --include " PREFIXED_ILIST "--include ${ILIST}")

# 传给自定义工具示例
execute_process(
    COMMAND my_custom_tool ${PREFIXED_ELIST} ${PREFIXED_ILIST}
    RESULT_VARIABLE CMD_EXIT_CODE
)

注意:该方法仅适用于列表元素不包含空格的场景,若元素带空格会导致解析错误。

方法二:自定义通用函数(推荐)

编写可复用函数遍历列表,逐个添加前缀,支持带空格的元素:

# 通用添加前缀函数
# 参数:OUTPUT_VAR 输出变量名,PREFIX 目标前缀,INPUT_LIST 待处理列表
function(add_prefix OUTPUT_VAR PREFIX INPUT_LIST)
    set(_temp_result "")
    foreach(item IN LISTS INPUT_LIST)
        list(APPEND _temp_result "${PREFIX}" "${item}")
    endforeach()
    set(${OUTPUT_VAR} "${_temp_result}" PARENT_SCOPE)
endfunction()

# 使用示例
set(ELIST thisdir thatdir otherdir)
set(ILIST adir bdir cdir)

add_prefix(PREFIXED_ELIST "--exclude" ${ELIST})
add_prefix(PREFIXED_ILIST "--include" ${ILIST})

# 传递给自定义工具
execute_process(
    COMMAND my_custom_tool ${PREFIXED_ELIST} ${PREFIXED_ILIST}
    RESULT_VARIABLE CMD_EXIT_CODE
)

该方法生成标准CMake列表(前缀与每个元素为独立列表项),传递给命令行时会被正确解析为单独参数,兼容性更强。


内容的提问来源于stack exchange,提问作者user3696153

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 13:48:19