CMake语法

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 布尔常量值

类型
true1,ON,YES,TRUE,Y,非0的值0
falseOFF,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源文件中定义的变量。
函数层:在命令函数中定义的变量,属于函数作用域内的变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值