【CMake 入门与进阶(10)】 CMakeLists.txt 语法规则_循环语句(附使用代码)

        cmake 中除了 if 条件判断之外,还支持循环语句,包括 foreach()循环、while()循环。

foreach 循环

        1、foreach 基本用法

        foreach 循环的基本用法如下所示:

foreach(loop_var arg1 arg2 ...)
     command1(args ...)
     command2(args ...)
     ...
endforeach(loop_var)

        endforeach 括号中的可写可不写,如果写了,就必须和 foreach 中的一致。

        参数 loop_var 是一个循环变量,循环过程中会将参数列表中的变量依次赋值给他,类似于 C 语言 for 循环中经常使用的变量 i。

# foreach 循环测试
foreach(loop_var A B C D)
     message("${loop_var}")
endforeach()

        打印信息为:

A
B
C
D

        使用 foreach 可以编译一个列表中的所有元素,如下所示:

# foreach 循环测试
set(my_list hello world china)
foreach(loop_var ${my_list})
     message("${loop_var}")
endforeach()

        打印信息如下:

        2、 foreach 循环之 RANGE 关键字

        用法如下所示:

foreach(loop_var RANGE stop)
foreach(loop_var RANGE start stop [step])

        对于第一种方式,循环会从 0 到指定的数字 stop,包含 stop,stop 不能为负数。

        而对于第二种,循环从指定的数字 start 开始到 stop 结束,步长为 step,不过 step 参数是一个可选参数, 如果不指定,默认 step=1;三个参数都不能为负数,而且 stop 不能比 start 小。

        接下来我们进行测试,测试一:

# foreach 循环测试
foreach(loop_var RANGE 4)
     message("${loop_var}")
endforeach()

        打印信息如下:

         测试二:

# foreach 循环测试
foreach(loop_var RANGE 1 4 1)
    message("${loop_var}")
endforeach()

        打印信息如下:

         3、foreach 循环之 IN 关键字

        用法如下:

foreach(loop_var IN [LISTS [list1 [...]]]
             [ITEMS [item1 [...]]])

        循环列表中的每一个元素,或者直接指定元素。

        接下来进行测试,测试一:

# foreach 循环测试
set(my_list A B C D)

foreach(loop_var IN LISTS my_list)
    message("${loop_var}")
endforeach()

        打印信息如下:

         测试二:

# foreach 循环测试
foreach(loop_var IN ITEMS A B C D)
    message("${loop_var}")
endforeach()

        打印信息同上。

while 循环

        while 循环用法如下:

while(condition)
 command1(args ...)
 command1(args ...)
 ...
endwhile(condition)

        endwhile 括号中的 condition 可写可不写,如果写了,就必须和 while 中的 condition 一致。

        cmake 中 while 循环的含义与 C 语言中 while 循环的含义相同,但条件 condition 为真时,执行循环体中的命令,而条件 condition 的语法形式与 if 条件判断中的语法形式相同。

# while 循环测试
set(loop_var 4)
while(loop_var GREATER 0)
    message("${loop_var}")
    math(EXPR loop_var "${loop_var} - 1")
endwhile()

        输出结果如下:

         上例中,while 循环的条件是(loop_var GREATER 0),等价于(loop_var > 0),当 loop_var 变量的有效数值大于 0 时,执行 while 循环体;在 while 循环体中使用到了 cmake 中的数学运算命令 math()。

        在 while 循环体中,打印 loop_var,之后将 loop_var 减一。

break、continue

        cmake 中,也可以在循环体中使用类似于 C 语言中的 break 和 continue 语句。

        1、break

        break()命令用于跳出循环,和在 C 语言中的作用是一样的,测试如下:

# while...break 测试
set(loop_var 10)

while(loop_var GREATER 0) #loop_var>0 时 执行循环体
    message("${loop_var}")
    if(loop_var LESS 6) #当 loop_var 小于 6 时
         message("break")
         break() #跳出循环
    endif()
    math(EXPR loop_var "${loop_var} - 1")#loop_var--
endwhile()

        打印信息如下:

         2、continue

        continue()命令用于结束本次循环,执行下一次循环,测试如下:

# while...continue 测试
# 打印所有偶数
set(loop_var 10)

while(loop_var GREATER 0) #loop_var>0 时 执行循环体
     math(EXPR var "${loop_var} % 2") #求余

     if(var EQUAL 0) #如果 var=0,表示它是偶数
         message("${loop_var}") #打印这个偶数
         math(EXPR loop_var "${loop_var} - 1")#loop_var--
         continue() # 执行下一次循环
     endif()

     math(EXPR loop_var "${loop_var} - 1")#loop_var--
endwhile()

        这段 cmake 代码是求 0 到 10 之间的偶数(左闭右开),并将偶数打印出来,使用到了 continue()命令, 代码不再解释,注释已经写得很清楚了。 打印结果如下:

         关于 break()和 continue()命令的使用就介绍到这里了。

猜你喜欢

转载自blog.csdn.net/cj_lsk/article/details/131241078