编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

7、Tars C++系列之依赖CMake(五)(cmake 依赖另一个共享库)

wxchong 2024-07-08 01:18:10 开源技术 49 ℃ 0 评论

继上一篇文章(点击查看),继续深入了解一下语言特性吧。

上一篇学习了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使用到的指令一一细说。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表