CMake基本语法 20200903

tech2023-02-08  97

原文链接: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>
最新回复(0)