CMake语法详解

2020-04-06  本文已影响0人  差点长成一枚帅哥

1.注释

2.变量定义与使用

在Cmake中所有变量都是字符串

3.Cmake列表(list)

4.操作符

5.流程控制-布尔常量值

6.条件控制

if, elseif, else, endif
例子:

set(value_a OFF)
set(value_b ON)
if(${value_a})
     message("value_a is true")
elseif(${value_b})
     message("value_b is true")
endif(${value_a})

7.循环控制

while 例子如下:

set(a "")
white(NOT a STREQUAL "xxx")
     set(a "${a}x")
     message("a == ${a}")
endwhile()

8.循环遍历

#循环打印 1,2,3,当item等于1则跳出本次循环,当item等于3则跳出循环
foreach(item 1 2 3)
     message("item = ${item}")
     if(item EQUAL "1")
        continue()
     elseif(item EQUAL "3")
        break()
     endif(item) 
endforeach
#循环打印 1-6的字符串
foreach(item RANGE 6)
     message("item = ${item}")
endforeach
#循环打印 梯度为3的字符串 0,3,6
foreach(item RANGE 0 7 3)
     message("item = ${item}")
endforeach
#循环打印 一个list
set(list_a 1 2 3 4 5 6)
foreach(item IN LISTS list_a)
     message("item = ${item}")
endforeach

8.CMake自定义函数

function(funcA ...)这是固定写法

function(funcA a b c)
   #分别打印 a,b,c的值
   message("a=${a}")
   message("b=${b}")
   message("c=${c}")

   #这里打印出参数个数,ARGC为系统函数
   message("ARGC=${ARGC}")
   #输出结果为:ARGC=3

   #这里打印出参数列表,ARGV为系统函数
   message("ARGV=${ARGV}")
   #输出结果为:ARGV=1:2:3

   #这里打印出第N个参数,ARGVN
   message("ARGV0=${ARGV0}")
   message("ARGV1=${ARGV1}")
   message("ARGV2=${ARGV2}")
   #输出结果为:ARGV0=1
   #输出结果为:ARGV0=2
   #输出结果为:ARGV0=3

endfunction(funcA)

#以下是调用函数
funcA(1 2 3)

9.Cmake自定义宏命令

macro 关键字作用域与调用者作用域一致

#宏定义
macro(maA a b)
    message("a=${a}")
    message("b=${b}")
endmacro(maA)

#宏调用
maA("hello" "word")
#输出结果为:a=hello
#输出结果为:b=word
 

10.CMake变量作用域

cache变量,在整个项目范围可见,一般在set定义变量时,指定CACHE就能定义cache变量
比如:set(cacheA "123" CACHE STRING INTERNAL)

在当前目录CMakeLists.txt中定义,以及在该文件包含的其他cmake源文件中定义的变量。

在命令函数中定义的变量,属于函数作用域内的变量

上一篇下一篇

猜你喜欢

热点阅读