我是靠谱客的博主 留胡子超短裙,最近开发中收集的这篇文章主要介绍CMake语法1 什么是CMake2 CMake源文件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

类型
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源文件中定义的变量。
函数层:在命令函数中定义的变量,属于函数作用域内的变量。

最后

以上就是留胡子超短裙为你收集整理的CMake语法1 什么是CMake2 CMake源文件的全部内容,希望文章能够帮你解决CMake语法1 什么是CMake2 CMake源文件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部