cmake foreach


目录
  • 功能
  • 1. 遍历list所有元素
  • 2. 从零开始到目标结果,stop不可为负数,默认步长为1
  • 3. 存在起始位置和截至位置的跳动,左右都是闭区间,步长可指定,默认为1
  • 4. 多集合的并集

功能

  • 有序遍历容器的所有元素
  • 可以使用break() 或者continue()

1. 遍历list所有元素

语法如下

foreach( )
	
endeach()

举例如下

set(LIST_SRC a.cpp b.cpp c.cpp)
foreach(item ${LIST_SRC})
    message(STATUS "item is ${item}")
endforeach()

#output
-- item is a.cpp
-- item is b.cpp
-- item is c.cpp

2. 从零开始到目标结果,stop不可为负数,默认步长为1

语法如下

foreach( RANGE ) 

举例如下

foreach(i RANGE 5)
    message(STATUS "i = ${i}")
endforeach()

# output
-- i = 0
-- i = 1
-- i = 2
-- i = 3
-- i = 4
-- i = 5

3. 存在起始位置和截至位置的跳动,左右都是闭区间,步长可指定,默认为1

语法如下

foreach( RANGE   [])

举例如下

foreach(j RANGE 3 6)
    message("j = ${j}") 
endforeach()
foreach(k RANGE 3 6 2)
    message("k = ${k}") 
endforeach()
# output
# default step = 1
j = 3
j = 4
j = 5
j = 6

# custom step = 2
k = 3
k = 5

4. 多集合的并集

  • LISTS可以认为是一个有名的集合,入set(A a b c)
  • ITEMS可以认为是一个匿名的集合,如a b c
    语法如下
foreach(loop_var IN [LISTS [] [ITEMS []]])

举例如下

set(A a b c)
set(B "1 2 3")

foreach(i IN ITEMS A B)
    message("i = ${i}")
endforeach()

foreach(i IN LISTS A B)
    message("i = ${i}")
endforeach()

#output
# ITEMS
i = A
i = B
# LISTS
i = a
i = b
i = c
i = 1 2 3