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

CMake多行变量传入函数问题:如何保留全部文件路径?

问题分析与解决

问题原因

调用SWC_PATH_STUBS_STATE函数时,直接展开列表变量${SWC_Original_path}会触发CMake的列表拆分行为——列表内每个元素会被当作独立的函数参数传递。这导致函数定义里的SWC_SRC_PATH仅接收列表第一个元素,第二个元素被视为未使用的额外参数,最终无法进入SWC_PATH变量。

修复步骤

  1. 保留列表参数的整体结构:调用函数时用双引号包裹列表变量,确保整个列表作为单个参数传递:
    SWC_PATH_STUBS_STATE(${STATE} "${SWC_Stubs_path}" "${SWC_Original_path}")
    
  2. 函数内维持列表赋值逻辑:函数中的set语句无需修改,因为${SWC_SRC_PATH}现在是完整列表,赋值时会自动保留所有元素:
    set(SWC_PATH ${SWC_SRC_PATH} PARENT_SCOPE)
    

完整修复代码

set(STATE STUBS_OFF)
Set(SWC_Original_path
    datax/xx/yy/zz/datafile.c
    datax/xx/yy/zz/datafile1.c
   )
set(SWC_Stubs_path
    stubs/xx/yy/cc/stubsfile.c
   )

#Generic Function to Update the SWC PATH and Stubs state
function(SWC_PATH_STUBS_STATE SWC_STUBS_STATE SWC_STUBS_PATH SWC_SRC_PATH)
    if(NOT ${SWC_STUBS_STATE} MATCHES "STUBS_ON")
        set(SWC_PATH ${SWC_SRC_PATH} PARENT_SCOPE)
        return()
    else()
        set(SWC_PATH ${SWC_STUBS_PATH} PARENT_SCOPE)
        return()
    endif()
endfunction()

#function call()
SWC_PATH_STUBS_STATE(${STATE} "${SWC_Stubs_path}" "${SWC_Original_path}")
set(xx_path ${SWC_PATH})

验证效果

修复后,xx_path会完整包含SWC_Original_path的两个文件路径:datax/xx/yy/zz/datafile.c和datax/xx/yy/zz/datafile1.c。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:52:17