CMake多行变量传入函数问题:如何保留全部文件路径?
问题分析与解决
问题原因
调用SWC_PATH_STUBS_STATE函数时,直接展开列表变量${SWC_Original_path}会触发CMake的列表拆分行为——列表内每个元素会被当作独立的函数参数传递。这导致函数定义里的SWC_SRC_PATH仅接收列表第一个元素,第二个元素被视为未使用的额外参数,最终无法进入SWC_PATH变量。
修复步骤
- 保留列表参数的整体结构:调用函数时用双引号包裹列表变量,确保整个列表作为单个参数传递:
SWC_PATH_STUBS_STATE(${STATE} "${SWC_Stubs_path}" "${SWC_Original_path}") - 函数内维持列表赋值逻辑:函数中的
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
相关产品推荐
相关产品推荐

