Cmake语法

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} )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值