CMake初识

1.什么是CMake

1.在Android Studio2.2及以上,构建原生库的默认工具是CMake。
2.CMake是一个跨平台的构建工具,可以用简单的语句来描述所有平台的安转(编译过程)。能够输出各种各样的makefile
或者project文件。CMake并不直接构建初最终的软件,而是产生其他工具的脚本,然后再依据这个工具的构建方式使用。
3.CMake是一个比make更高级的编译配置工具,它可以根据不同的平台,不同的编译器,生成对应的makefile或者vcproj
项目,从而达到跨平台的目的。Android Stuido利用CMake生成的是ninja。ninja是一个小型的构建系统。
3.CMkae其实是一个跨平台的支持产出各种不同构建脚本的工具。

2.CMake源文件

1.CMake的源文件可以包含命令、注释、空格和换行。
2.以CMake编写的源文件以CMakeLists.txt命名或以.cmake为扩展名。
3.可以通过add_subdirectory()命令把子目录的CMake源文件添加进来。
4.CMake源文件中所有有效的语句都是命令。可以是内置命令或自定义的函数/宏命令。

3.CMake注释

1.单行注释:#注释内容
2.多行注释:#[[注释内容]]

4.CMake变量

1.CMake中所有变量都是string类型。可以使用set()或unset()命令来声明或移除一个变量
2.变量的引用 ${变量名}

声明变量:set(变量名 变量值)
set(var 123)
引用变量 message命令用来打印
message("var = ${var}")

5.CMake列表

1.列表也是字符串,可以把列表看作是一个特殊的变量,这个变量有多个值。

set(列表名 值1 值2 ... 值N)
set(列表名 “值1;值2; ..., 值N”)
列表的引用:
${列表名}

6.CMake操作符

1.一元
	EXIST COMMAND DEFINED
2.二元
	EQUAL LESS LESS_EQUAL GREATER GREATER_EQUAL STREQUAL STRLESS STRLESS_EQUAL STRGREATER STRGREATER_EQUAL VERSION_EQUAL VERSION_LESS VERSION_LESS_EQUAL VERSION_GREATER VERSION_GREATER_EQUAL MATCHES
3.逻辑
	NOT AND OR
优先级:带括号的优先于一元 优先于 二元 优先于逻辑

7.CMake布尔常量值

1.true 1 ON YES TRUE Y 非0的值
2.false 0 OFF NO FALSE N IGNORE NOTFOUND 空字符串 以-NOTFOUND结尾的字符串

8.CMake条件命令

1.语法格式
if(表达式)
	command
elseif(表达式)
	command
else(表达式)
	command
endif(表达式)

9.CMake循环命令

1.语法格式
while(表达式)
	command
endwhile(表达式)

break()命令可以跳出整个循环,continue()可以跳出当前循环

foreach(循环变量 参数1 参数2 ... 参数N)
	command
endforeach(循环变量)
每次迭代设置循环变量为参数

foreach(循环变量 RANGE total)
	command
endforeach(循环变量)
循环范围从0到total

foreach(循环变量 RANGE start stop step)
	command
endforeach(循环变量)
循环范围从start到stop,循环增量为step

for(循环变量 IN LISTS 列表)
	command
endforeach(循环变量)

10.CMake自定义函数命令

function(函数名 参数1 参数2 参数3 ... 参数N)
	command
endfunction(函数名)

函数命令调用格式:
函数名(实参列表)

例:
function(methodname x y z)
    message("x = ${x}")
    message("y = ${y}")
    message("z = ${z}")
    message("ARGC = ${ARGC}") # 参数个数
    message("arg1 = ${ARGV0} arg2 = ${ARGV1} arg3 = ${ARGV2}") # 取出每个函数参数
    message("all args = ${ARGV}") # 以列表形式输出函数参数
endfunction(methodname)
methodname(1 2 3)
输出
x = 1
y = 2
z = 3
ARGC = 3
arg1 = 1 arg2 = 2 arg3 = 3
all args = 1;2;3

11.CMake自定义宏命令

macro(宏名 参数1 参数2 参数3 ... 参数N)
	command
endmacro(宏名)

宏命令调用格式
宏名(实参列表)

例:
macro(ma x y)
    message("x = ${x}")
    message("y = ${y}")
endmacro(ma)
ma(5 6)
输出
x = 5
y = 6
宏命令的作用域和调用者的作用域是一样的。

12.CMake变量的作用域

1.全局层:cache变量,在整个项目范围可见,一般在set定义变量时,指定CACHE参数就能定义为cache变量
2.目录层:在当前目录CMakelist.txt中定义,以及在该文件包含的其他cmake源文件中定义的变量
3.函数层:在命令函数中定义的变量,属于函数作用域内的变量
4.函数层的变量会覆盖 目录层的变量  目录层会覆盖全局层变量;查找变量值也是同理,会从函数层开始查找 如果查找不到就到目录层 如果还不行就到全局层查找
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值