通过将所有文件附加到新列表(作为输出参数传递给函数本身)来创建新列表
function(concat_path iLiItems oLiItems cVal)
foreach(pfile ${${iLiItems}})
string(CONCAT l ${${cVal}} ${pfile})
message(STATUS ${pfile} " - " ${l})
set(${oLiItems} ${${oLiItems}} ${l} PARENT_SCOPE)
endforeach()
endfunction()
function(list_print liItems)
message(STATUS "The list contains: ")
foreach(f ${${liItems}})
message(STATUS ${f})
endforeach()
endfunction()
set(PROTO_SRCS base.proto dht.proto)
foreach(pfile ${PROTO_SRCS})
string(REPLACE ".proto" ".pb" fname ${pfile})
string(CONCAT cc ${fname} ".cc")
string(CONCAT h ${fname} ".h")
set(PROTO_CPP_SRCS ${PROTO_CPP_SRCS} ${cc} ${h})
endforeach()
string(CONCAT path_prefix ${CMAKE_CURRENT_SOURCE_DIR} "/")
concat_path(PROTO_SRCS PROTO_SRCS_PATH path_prefix)
list_print(PROTO_SRCS_PATH)
Run Code Online (Sandbox Code Playgroud)我看到的问题是,当我最终使用函数“list_print”打印时,我看到输出列表(PROTO_SRCS_PATH)中只存在一个元素,而我期望有两个元素对应于两个输入文件:
-- base.proto - C:/Users/vaddina/workspace/protobuf-tests/app-wo-findprotobuf/base.proto
-- dht.proto - C:/Users/vaddina/workspace/protobuf-tests/app-wo-findprotobuf/dht.proto
-- The list contains:
-- C:/Users/vaddina/workspace/protobuf-tests/app-wo-findprotobuf/dht.proto
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么 ?谢谢。
使用PARENT_SCOPE选项,您可以更改父作用域中的变量值,但当前作用域中的变量保持不变。关于PARENT_SCOPE 的文档对此进行了明确描述:
\n\n\n\n\n此命令会将变量的值设置到父目录或调用函数中(以适用于当前情况的为准)。变量\xe2\x80\x99s 值的先前状态在当前范围内保持不变(例如,如果之前未定义,则它仍然是未定义,如果它有一个值,它仍然是该值)。
\n
因此,调用
\n\nset(${oLiItems} ${${oLiItems}} ${l} PARENT_SCOPE)\nRun Code Online (Sandbox Code Playgroud)\n\n始终将空值视为第二个参数(您永远不会在当前范围内分配变量)。因此父作用域中的变量始终由 分配(而不是附加!)${l}。
通常,使用 PARENT_SCOPE 设置变量仅执行一次。中间计算应该使用并更新当前范围内的变量:
\n\nfunction(concat_path iLiItems oLiItems cVal) \n foreach(pfile ${${iLiItems}})\n string(CONCAT l ${${cVal}} ${pfile})\n message(STATUS ${pfile} " - " ${l})\n set(${oLiItems} ${${oLiItems}} ${l}) # Update list in the current scope only\n endforeach()\n # Before return, propagate variable\'s value to the parent scope.\n set(${oLiItems} ${${oLiItems}} PARENT_SCOPE)\nendfunction()\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3676 次 |
| 最近记录: |