CMAKE语法

cmake指令

脚本指令

cmake参数类型分为 方括号参数 引号参数 非引号参数

方括号参数 message(\[\[contens]]) message([===[contents]===])

引号参数 message("contens") message(" multi... line") message("inhrent variables: ${CMAKE_VERSION}")

非引号参数 没懂

项目指令

CTest指令

变量

变量名区分大小写 可以包含任何字符 变量操作指令有set()和unset()还有string() list()等 变量名可以写空格 但是影响效率 set(MyString "str content 1")

引用变量

cmake对引用变量会进行重复展开,直到不能展开为止。 {MyOuters{MyInner}} 会先展开MyInner,然后展开 <math xmlns="http://www.w3.org/1998/Math/MathML"> M y o u t e r s . . . 即不断的替换展开 {Myouters...} 即不断的替换展开 </math>Myouters...即不断的替换展开 因此变量的书写尽量不要太逆天

<math xmlns="http://www.w3.org/1998/Math/MathML"> 用于引用普通变量或缓存变量 {}用于引用普通变量或缓存变量 </math>用于引用普通变量或缓存变量ENV{} 用于引用环境变量 $CACHE{} 用于引用缓存变量

在命令行能够通过 -- 向脚本传递信息 CMAKE_ARGV CMAKE_ARC 分别记录值和参数数量 --不传递也行

环境变量

在系统里创建环境变量之后,设置的值会存储在构建树中 如果不改构建树环境变量是不会变的

缓存变量

缓存变量是存储在CMakeCache.txt文件中的变量。

set(<variable> <value> CACHE <type> <docstring> [FORCE]) e.g. set(VAR1 "VALUE1" CACHE STRING "VARAIBLE1" FORCE) 其中type的类型包括BOOL FILEPATH PATH STRING INTERNAL BOOL的取值有 ON OFF FILEPATH ?? PATH ?? STRING ?? INTERNAL 会隐式添加FORCE项

docstring 为说明性文字?

FORCE用于强制覆盖已经设定的值

bash 复制代码
set(VAR1 "value1" CACHE STRING "variables")
message("VAR1: " ${VAR1})

set(VAR1 "value2" CACHE STRING "variables")
message("VAR1: " ${VAR1})

set(VAR1 "value3" CACHE STRING "variables")
message("VAR1: " ${VAR1})

VAR1均为value1

bash 复制代码
set(VAR1 "value1" CACHE STRING "variables")
message("VAR1: " ${VAR1})

set(VAR1 "value2" CACHE STRING "variables" FORCE)
message("VAR1: " ${VAR1})

set(VAR1 "value3" CACHE STRING "variables")
message("VAR1: " ${VAR1})

VAR1被强制覆盖,value2

变量作用域

函数作用域 function() 目录作用域 add_subdirectory() 脚本中这个是用不了的

1.变量会覆盖嵌套的子作用域中,类似于多态或者重写。如果子作用域有值用子作用域的,如果没有就是父作用域的值。退出当前局部作用域之后,当前作用域的变量消失。

2.可以在子作用域中修改父作用域的变量,但只能修改高一级的,高两级及以上的就不行了。 修改方法是set(VAR "value" PARENT_SCOPE)

列表

创建列表 set(mylist "value1" "value2" "value3") 列表接口 list(LENGTH <list> <out-var>)

scss 复制代码
list(LENGTH mylist VARL)
message("list len: " ${VARL})

list(GET <list> <element index> [<index> ...] <out-var>)

scss 复制代码
list(GET mylist 0 VAR0)
message("var0 is :" ${VAR0})

list(JOIN mylist <glue> <out-var>) 其中<glue>就是一个字符串 用来连接mylist中的各个元素

scss 复制代码
list(JOIN mylist " _ " L3)
message("L3 : " ${L3})

list(SUBLIST <list> <begin> <length> <out-var>)

相关推荐
武子康16 分钟前
Java-72 深入浅出 RPC Dubbo 上手 生产者模块详解
java·spring boot·分布式·后端·rpc·dubbo·nio
椰椰椰耶2 小时前
【Spring】拦截器详解
java·后端·spring
brzhang3 小时前
我操,终于有人把 AI 大佬们 PUA 程序员的套路给讲明白了!
前端·后端·架构
wan_da_ren5 小时前
JVM监控及诊断工具-GUI篇
java·开发语言·jvm·后端
【本人】5 小时前
Django基础(一)———创建与启动
后端·python·django
lifallen6 小时前
Kafka 时间轮深度解析:如何O(1)处理定时任务
java·数据结构·分布式·后端·算法·kafka
你的人类朋友6 小时前
【✈️速通】什么是SIT,什么是UAT?
后端·单元测试·测试
程序无bug8 小时前
后端3行代码写出8个接口!
java·后端
绝无仅有8 小时前
使用LNMP一键安装包安装PHP、Nginx、Redis、Swoole、OPcache
后端·面试·github
他日若遂凌云志8 小时前
C++ 与 Lua 交互全链路解析:基于Lua5.4.8的源码剖析
后端