注意:CMake版本要求 > 3.17
通过这种方式,遍历的还是一个或多个列表,可以理解为是方式3的加强版
- 因为通过上面的方式遍历多个列表,但是又想把指定列表中的元素取出来使用是做不到的,在这个加强版中就可以轻松实现
参数:
-
IN
:关键字,表示在xxx
里面
-
ZIP_LISTS
:关键字,对应的是列表list
,通过set、list
可以获得
-
loop_var
:存储每次循环取出的值,可以根据要遍历的列表的数量指定多个变量,用于存储对应的列表当前取出的那个值
- 如果指定了多个变量名,它们的数量应该和列表的数量相等
- 如果只给出了一个
loop_var
,那么它将一系列的loop_var_N
变量来存储对应列表中的当前项
-
loop_var_0
对应第一个列表
-
loop_var_1
对应第二个列表
- 以此类推…
示例:cmake_minimum_required(VERSION 3.17)
project(test)
# 通过list给列表添加数据
list(APPEND WORD Die SnowK "Die SnowK")
list(APPEND NAME I am Die SnowK haha)
# 遍历列表
foreach(item1 item2 IN ZIP_LISTS WORD NAME)
message(STATUS "当前遍历的值为: item1 = ${item1}, item2=${item2}" )
endforeach()
message("=============================")
# 遍历列表
foreach(item IN ZIP_LISTS WORD NAME)
message(STATUS "当前遍历的值为: item1 = ${item_0}, item2=${item_1}" )
endforeach()
结果-- 当前遍历的值为: item1 = Die, item2=I
-- 当前遍历的值为: item1 = SnowK, item2=am
-- 当前遍历的值为: item1 = Die SnowK, item2=Die
-- 当前遍历的值为: item1 = , item2=SnowK
-- 当前遍历的值为: item1 = , item2=haha
=============================
-- 当前遍历的值为: item1 = Die, item2=I
-- 当前遍历的值为: item1 = SnowK, item2=am
-- 当前遍历的值为: item1 = Die SnowK, item2=Die
-- 当前遍历的值为: item1 = , item2=SnowK
-- 当前遍历的值为: item1 = , item2=haha