原文链接:https://blog.csdn.net/clz0928/article/details/105696168
CMake语法
1 什么是CMake2 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。
12
2 CMake源文件
CMake的源码文件可以包含命令、注释、空格和换行。
CMake编写的源文件以CMakeLists.txt命名或以.cmake为扩展名。
可以通过add_subdirectory()命令把子目录的CMake源文件添加进来。
CMake源文件中所有有效的语句都是命令,可以是内置命令或自定义的函数/宏命令。
1234
2.1 CMake注释
单行注释:#
多行注释:#[[]]
12
2.2 CMake变量
CMake中所有变量都是string类型。可以使用set()和unset()来声明或移除一个变量
声明变量:set(变量名 变量值)——set(var 123)
变量的引用:${变量名}
引用变量message命令用来打印
message("var = ${var}")
12345
set(var 123
)
message
("var = ${var}")
12
2.3 CMake列表(lists)
列表也是字符串,可以把列表看作一个特殊的变量,这个变量有多个值。
语法格式:
set(列表名 值1 值2...值N)
或
set(列表名 "值1; 值2; ...; 值N")
列表的引用:$(列表名)
123456
set(list_var 1 2 3 4 5
)
message
("list_var = ${list_var}")
12
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的值0falseOFF,NO,FALSE,N,℃NORE,NOTFOUND,空字符串,以一NOTFOUND结尾的字符串
2.4.3 条件命令
语法格式:
if(表达式)
COMMAND(ARGS...)
elseif(表达式)
COMMAND(ARGS...)
else(表达式)
COMMAND(ARGS...)
endif(表达式)
12345678
2.4.4 循环命令
语法格式:
while(表达式)
COMMAND(ARGS)
endwhile()
break():跳出整个循环
continue():跳出当前循环
123456
set(a
"")
while(NOT a STREQUAL
"xxx")
set(a
"${a}x")
message
("a = ${a}")
endwhile
()
12345
2.4.5 循环遍历一
语法格式:
foreach(循环变量 参数1 参数2 ... 参数N)
COMMAND(ARGS ...)
endforeach(循环变量)
foreach也支持break()和continue()命令跳出循环
12345
foreach(item 1 2 3 4
)
message
("item = ${item}")
endforeach
()
123
2.4.6 循环遍历二
语法格式:
foreach(循环变量 RANGE total)
COMMAND(ARGS...)
endforeach(循环变量)
循环范围从0到total。
12345
foreach(item RANGE 5
)
message
("item = ${item}")
endforeach
()
123
2.4.7 循环遍历三
语法格式:
foreach(循环变量 RANGE start stop step)
COMMAND(ARGS...)
endforeach(循环变量)
循环范围从start到stop,循环增量为step。
12345
foreach(item RANGE 10 20 2
)
message
("item ${item}")
endforeach
()
123
2.4.8 循环遍历四——对列表的循环
语法格式:
foreach(循环变量 IN LISTS 列表)
COMMAND(ARGS...)
endforeach(循环变量)
1234
set(list 1 2 4 5 7 10
)
foreach(item IN LISTS list
)
message
("item ${item}")
endforeach
()
1234
2.5 自定义函数命令
自定义函数命令格式:
function(< name >[arg1 [arg2 [arg3 ...]]])
COMMAND()
endfunction(< name >)
1234
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)
1234567891011
2.6 自定义宏命令
自定义宏命令格式:
macro(< name > [arg1[arg2[arg3 ...]]])
COMMAND()
endmacro(< name >)
宏命令调用格式:
name(实参列表)
123456
macro
(ma x y z
)
message
("x = ${x}")
message
("y = ${y}")
message
("z = ${z}")
endmacro
(ma
)
ma
(1 2 3
)
123456
2.7 变量的作用域
全局层:cache变量,在整个项目范围可见,一般在set定义变量时,指定CACHE参数就能定义为cache变量。
目录层:在当前目录CMakeLists.txt中定义,以及在该文件包含的其他cmake源文件中定义的变量。
函数层:在命令函数中定义的变量,属于函数作用域内的变量。
123
</div><div><div></div></div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-e0530931f4.css" rel="stylesheet">
</div>