如何使用cmake显示和返回列表

时间:2016-10-01 19:03:36

标签: cmake

这是我第一次使用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 ...为什么?

1 个答案:

答案 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'.

这样的"动态"名称广泛用于函数和宏中。