概述
CMake语法
- 1 什么是CMake
- 2 CMake源文件
- 2.1 CMake注释
- 2.2 CMake变量
- 2.3 CMake列表(lists)
- 2.4 CMake流程控制
- 2..4.1 操作符
- 2.4.2 布尔常量值
- 2.4.3 条件命令
- 2.4.4 循环命令
- 2.4.5 循环遍历一
- 2.4.6 循环遍历二
- 2.4.7 循环遍历三
- 2.4.8 循环遍历四——对列表的循环
- 2.5 自定义函数命令
- 2.6 自定义宏命令
- 2.7 变量的作用域
1 什么是CMake
CMake:一个跨平台的支持产出各种不同的构建脚本的一个工具。
在Android Studio2.2及以上,构建原生库的默认工具是CMake。
2 CMake源文件
CMake的源码文件可以包含命令、注释、空格和换行。
CMake编写的源文件以CMakeLists.txt命名或以.cmake为扩展名。
可以通过add_subdirectory()命令把子目录的CMake源文件添加进来。
CMake源文件中所有有效的语句都是命令,可以是内置命令或自定义的函数/宏命令。
2.1 CMake注释
单行注释:#
多行注释:#[[]]
2.2 CMake变量
CMake中所有变量都是string类型。可以使用set()和unset()来声明或移除一个变量
声明变量:set(变量名 变量值)——set(var 123)
变量的引用:${变量名}
引用变量message命令用来打印
message("var = ${var}")
set(var 123)
message("var = ${var}")
2.3 CMake列表(lists)
列表也是字符串,可以把列表看作一个特殊的变量,这个变量有多个值。
语法格式:
set(列表名 值1 值2...值N)
或
set(列表名 "值1; 值2; ...; 值N")
列表的引用:$(列表名)
set(list_var 1 2 3 4 5)
message("list_var = ${list_var}")
2.4 CMake流程控制
2…4.1 操作符
类型 | 名称 |
---|---|
一元 | EXIST,COMMAND,DEFINED |
二元 | EQUAL,LESS,LESS_EQUAL,GREATER,GREATER_EQUAL,STREQUAL,STRLESS,STRLESS_EQUAL,TRGREATER,STRGREATER_EQUAL,VERSION_EQUAL,VERSION_LESS,VERSION_LESS_EQUAL,ERSION_GREATER,VERSION_GREATER_EQUAL,MATCHES |
逻辑 | NOT,AND,OR |
2.4.2 布尔常量值
类型 | 值 |
---|---|
true | 1,ON,YES,TRUE,Y,非0的值0 |
false | OFF,NO,FALSE,N,℃NORE,NOTFOUND,空字符串,以一NOTFOUND结尾的字符串 |
2.4.3 条件命令
语法格式:
if(表达式)
COMMAND(ARGS...)
elseif(表达式)
COMMAND(ARGS...)
else(表达式)
COMMAND(ARGS...)
endif(表达式)
2.4.4 循环命令
语法格式:
while(表达式)
COMMAND(ARGS)
endwhile()
break():跳出整个循环
continue():跳出当前循环
set(a "")
while(NOT a STREQUAL "xxx")
set(a "${a}x")
message("a = ${a}")
endwhile()
2.4.5 循环遍历一
语法格式:
foreach(循环变量 参数1 参数2 ... 参数N)
COMMAND(ARGS ...)
endforeach(循环变量)
foreach也支持break()和continue()命令跳出循环
foreach(item 1 2 3 4)
message("item = ${item}")
endforeach()
2.4.6 循环遍历二
语法格式:
foreach(循环变量 RANGE total)
COMMAND(ARGS...)
endforeach(循环变量)
循环范围从0到total。
foreach(item RANGE 5)
message("item = ${item}")
endforeach()
2.4.7 循环遍历三
语法格式:
foreach(循环变量 RANGE start stop step)
COMMAND(ARGS...)
endforeach(循环变量)
循环范围从start到stop,循环增量为step。
foreach(item RANGE 10 20 2)
message("item ${item}")
endforeach()
2.4.8 循环遍历四——对列表的循环
语法格式:
foreach(循环变量 IN LISTS 列表)
COMMAND(ARGS...)
endforeach(循环变量)
set(list 1 2 4 5 7 10)
foreach(item IN LISTS list)
message("item ${item}")
endforeach()
2.5 自定义函数命令
自定义函数命令格式:
function(< name >[arg1 [arg2 [arg3 ...]]])
COMMAND()
endfunction(< name >)
function(func x y z)
message("call function func")
message("x = ${x}")
message("y = ${y}")
message("z = ${z}")
message("ARGC = ${ARGC}")
message("arg1 = ${ARGV0} arg2 = ${ARGV1} arg3 = ${ARGV2}")
message("all ${ARGV}")
endfunction(func)
func(1 3 5)
2.6 自定义宏命令
自定义宏命令格式:
macro(< name > [arg1[arg2[arg3 ...]]])
COMMAND()
endmacro(< name >)
宏命令调用格式:
name(实参列表)
macro(ma x y z)
message("x = ${x}")
message("y = ${y}")
message("z = ${z}")
endmacro(ma)
ma(1 2 3)
2.7 变量的作用域
全局层:cache变量,在整个项目范围可见,一般在set定义变量时,指定CACHE参数就能定义为cache变量。
目录层:在当前目录CMakeLists.txt中定义,以及在该文件包含的其他cmake源文件中定义的变量。
函数层:在命令函数中定义的变量,属于函数作用域内的变量。
最后
以上就是留胡子超短裙为你收集整理的CMake语法1 什么是CMake2 CMake源文件的全部内容,希望文章能够帮你解决CMake语法1 什么是CMake2 CMake源文件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复