这是我第一次使用cmake,我对列表有两个问题:
1)如何显示列表?
2)如何在函数中返回列表?
这是我的代码:
function(GET_ALL_DIRS where SEP)
message (STATUS "Let's search all directories in ${where}")
file (GLOB TMP_LIST_DIR ${where}${SEP}*)
foreach (tmp_elem ${TMP_LIST_DIR})
if (IS_DIRECTORY ${tmp_elem})
list (APPEND "${every_class}" ${tmp_elem})
message ("We add ${tmp_elem}")
endif()
endforeach()
list (LENGTH "${every_class}" nb_elem)
message ("in the list there is ${nb_elem} elements")
set(${tst} "${every_class}" PARENT_SCOPE)
endfunction()
GET_ALL_DIRS (includes ${SEP})
list (LENGTH "${tst}" nb_elem)
message ("after get_all_dirs there is ${nb_elem} elements")
在函数中我有正确数量的元素,但在它之后我有0 ...为什么?
答案 0 :(得分:2)
功能参数规格
表示CMake需要名称,而不是取消引用该名称(${..}
)。
正确:
list(APPEND every_class ${tmp_elem})
list(LENGTH every_class nb_elem)
set(tst ${every_class} PARENT_SCOPE)
在CMake中,变量或列表的名称本身可以表示为对另一个变量的依赖性的结果。以下结构完全有效:
set(my_var_name "a")
set(${my_var_name} "some value") # Assign value to variable 'a'
set(name_suffix "b")
list(APPEND list_${name_suffix} "other value") # Appends to a list 'list_b'.
这样的"动态"名称广泛用于函数和宏中。