继上一篇文章(点击查看),继续深入了解一下语言特性吧。
上一篇学习了CMake的变量知识,这一篇开讲循环语句咯。
1、循环语句
格式:
foreach(loop_var arg1 arg2 ...)
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endforeach(loop_var)
foreach(loop_var RANGE total)
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endforeach(loop_var)
foreach(loop_var RANGE start stop [step])
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endforeach(loop_var)
foreach(loop_var IN [LISTS [list1 [...]]]
[ITEMS [item1 [...]]])
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endforeach(loop_var)
1.1、遍历可变参数
foreach(loop_var arg1 arg2 ...)
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endforeach(loop_var)
示例:
cmake_minimum_required(VERSION 3.10)
project("foreach")
foreach(QUESTION "question1" "question2" "question3")
message("QUESTION:${QUESTION}")
endforeach(QUESTION)
输出:
QUESTION:question1
QUESTION:question2
QUESTION:question3
1.2、遍历计数器
foreach(loop_var RANGE total)
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endforeach(loop_var)
示例:
cmake_minimum_required(VERSION 3.10)
project("foreach")
foreach(INDEX RANGE 10)
math(EXPR VALUE "${INDEX} % 2")
if(${VALUE} EQUAL "0")
continue()
endif()
message("INDEX:${INDEX}")
endforeach(INDEX)
上面例子还演示了continue命令,还演示math命令进行数学计算,这真的把CMake语言能力大大提升了。
输出:
INDEX:1
INDEX:3
INDEX:5
INDEX:7
INDEX:9
1.3、遍历定制计数器
foreach(loop_var RANGE start stop [step])
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endforeach(loop_var)
示例:
cmake_minimum_required(VERSION 3.10)
project("foreach")
foreach(INDEX RANGE 10 20 2)
if(${INDEX} GREATER_EQUAL "16")
break()
endif()
message("INDEX:${INDEX}")
endforeach(INDEX)
上面例子还演示break命令。
输出:
INDEX:10
INDEX:12
INDEX:14
1.4、遍历列表
foreach(loop_var IN [LISTS [list1 [...]]]
[ITEMS [item1 [...]]])
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endforeach(loop_var)
示例:
cmake_minimum_required(VERSION 3.10)
project("foreach")
set(TARS_FILE_LIST hello.tars base.tars request.tars response.tars)
foreach(TARS_FILE IN ITEMS ${TARS_FILE_LIST})
message("TARS_FILE:${TARS_FILE}")
endforeach(TARS_FILE)
输出:
TARS_FILE:hello.tars
TARS_FILE:base.tars
TARS_FILE:request.tars
TARS_FILE:response.tars
示例:
cmake_minimum_required(VERSION 3.10)
project("foreach")
set(TARS_FILE_LIST1 hello.tars base.tars)
set(TARS_FILE_LIST2 request.tars response.tars)
foreach(TARS_FILE IN LISTS TARS_FILE_LIST1 TARS_FILE_LIST2)
message("TARS_FILE:${TARS_FILE}")
endforeach(TARS_FILE)
注意:这里直接使用变量名:TARS_FILE_LIST1 TARS_FILE_LIST2
输出:
TARS_FILE:hello.tars
TARS_FILE:base.tars
TARS_FILE:request.tars
TARS_FILE:response.tars
好了,语言特性基本讲完咯,看CMakeLists.txt应该不存在障碍了,可能就是会遇到有些CMake命令没了解过,这会可以上官网查看具体用途了。后续我会针对TarsCpp使用到的指令一一细说。
本文暂时没有评论,来添加一个吧(●'◡'●)