Cmake语法
变量
# 语法
# 注释
#[[ 多行注释
hello
world
c and c++ ]]
# 设置变量
set(变量名 变量值)
# 移除变量
unset(变量名)
# 打印
message(字符串)
#字符串引用变量
"${变量名}"
# 列表
set(列表名 数值1 数值2 数值3 ...)
# 或者
set(列表名 "数值1;数值2;数值3;...")
案例
set(a 123)
message("a = ${a}")
unset(a)
message("a = ${a}")
set(list_item 1 2 3 4 5)
message("list_item = ${list_item}")
打印结果
a = 123
a =
list_item = 1;2;3;4;5
条件语句
if(表达式) true 表达式
elseif(表达式) true 表达式
else(表达式) # false 表达式
endif(表达式) # false 表达式
案例
set(b OFF)
set(c ON)
if(b)
message("if")
elseif(c)
message("elseif")
else(b)
message("else")
endif(c)
message("endif")
打印结果
elseif
endif
循环语句
while(表达式)
# 操作语句
endwhile()
foreach(循环变量 参数1 参数2 参数3 ...)
# 操作语句
# 可以使用break() continue()
endforeach(循环变量)
foreach(变量名 RANGE start stop step)
# 操作语句
endforeach(变量名)
foreach(变量名 IN LISTS 列表)
# 操作语句
endforeach(变量名)
案例
# while 循环
set(a "")
while(NOT a STREQUAL "xxx")
set(a "${a}x")
endwhile()
message("a = ${a}")
# for 循环
set(list_item 1 2 3 4 5)
foreach(item ${list_var})
# if 语句
if(item STREQUAL 2)
# continue()
break()
endif()
message("item = ${item}")
endforeach()
foreach(tem RANGE 1 5 2)
message("tem = ${tem}")
endforeach(tem)
打印结果
a = xxx
item = 1
tem = 1
tem = 3
tem = 5
函数
function(函数名 参数1 参数2 参数3 ...)
# 操作语句
endfunction(函数名)
案例
# 函数定义
function(func x y z)
message("call function func")
message("x = ${x} , y = ${y} , z = ${z}")
# 传入参数的个数
message("ARGC = ${ARGC}")
# 参数列表
message("ARGV = ${ARGV}")
message("ARGV0 = ${ARGV0}")
message("ARGV1 = ${ARGV1}")
message("ARGV2 = ${ARGV2}")
message("ARGV3 = ${ARGV3}")
endfunction(func)
# 调用函数
func(4 5 6)
打印结果
call function func
x = 4 , y = 5 , z = 6
ARGC = 3
ARGV = 4;5;6
ARGV0 = 4
ARGV1 = 5
ARGV2 = 6
ARGV3 =
自定义宏
和函数类似,关键字macro
CMakeLists.txt 文件
# cmake 最低支持的版本
cmake_minimum_required(VERSION 3.4.1)
# add_library(库名称 库类型 库的源文件)
# 库类型
# STATIC 静态库
# SHARED 动态库
# MODULE 在使用dyld时有效,如不用dyld则等同于SHARED
# EXCLUDE_FROM_ALL 该库不会被默认构建
add_library(
native-lib
SHARED
src/main/cpp/native-lib.cpp )
#[[
添加一个已存在的预编译库
add_library(库名称 库类型 IMPORTED)
set_target_properties(
test # 库名称
PROPERTIES IMPROTED_LOCATION # 指明要设置的参数
库路径/${ANDROID_ABI}/libtest.so # 导入库的路径
)
]]
# 查找系统库 log
find_library(
log-lib
log )
# 设置依赖库
# target_link_libraries(目标模块 依赖库1 依赖库2 ...)
# 依赖库要按照c++的依赖顺序
target_link_libraries(
native-lib
${log-lib} )