美文网首页
CMake语法详解

CMake语法详解

作者: 差点长成一枚帅哥 | 来源:发表于2020-04-06 23:11 被阅读0次

    1.注释

    • 单行注释
      # 我是一行注释
    • 多行注释
      #[[我是多行注释
      我是多行注释]]

    2.变量定义与使用

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

    • 声明变量:set(变量名 变量值) ,比如set(name 张三)
    • 移除变量:unset(变量名),比如unset(name)
    • 打印变量:message("name=${name}")

    3.Cmake列表(list)

    • 声明变量:set(list_array 1 2 3 4 5) 或 set(list_array "1;2;3;4;5")
    • 打印变量:message("list_array ${list_array}")

    4.操作符

    • 一元操作符:EXIST, COMMAND, DEFINED
    • 二元操作符:EQUAL,LESS,LESS_EQUAL,GREATER,MATCHES等等
    • 逻辑操作符:NOT,AND,OR
      优先级是 () > 一元操作符 > 二元操作符 > 逻辑操作符

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

    • true: 1,ON,YES,TRUE,Y,非0的值
    • false: 0,OFF,NO,N,FALSE,空字符串,以-NORFOUND结尾的字符串

    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.循环遍历

    • foreach 方式一
    #循环打印 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
    
    • foreach 方式二
    #循环打印 1-6的字符串
    foreach(item RANGE 6)
         message("item = ${item}")
    endforeach
    
    • foreach 方式三
    #循环打印 梯度为3的字符串 0,3,6
    foreach(item RANGE 0 7 3)
         message("item = ${item}")
    endforeach
    
    • foreach 方式四
    #循环打印 一个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源文件中定义的变量。

    • 函数层

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

    相关文章

      网友评论

          本文标题:CMake语法详解

          本文链接:https://www.haomeiwen.com/subject/zepbphtx.html