Android NDK之【CmakeList配置详解】【CMake语法了解】

Android NDK之【CmakeList配置详解】【CMake语法了解】

什么是CMake

CMake其实就是一套构建Android原生库的工具,CMake也有自己的语法,比如定义变量、函数、条件判断、while/for循环等。在Android Studio 2.2以前是用MK进行构建 Android原生库,后Google推出CMake,CMake其实是对MK的一个二次封装。

CmakeList配置说明

#设置CMake最低版本
cmake_minimum_required(VERSION 3.10.2)

#所有文件都可导入,否则要一个一个文件导
file(GLOB allCPP  *.c *.h *.cpp)

#设置so库的路径 ${CMAKE_SOURCE_DIR}表示当前CMake的路径 ${CMAKE_ANDROID_ARCH_ABI}表示当前的架构
set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../jniLibs/${CMAKE_ANDROID_ARCH_ABI}")

#项目名称
project("voicetestdemo")

#添加动态库 SHARED表示动态库 STATIC表示静态库
add_library( # 总库名字
             native-lib

             # 动态库
             SHARED

             # 已经导入所有的C和C++文件
             ${allCPP}
        )

#找到系统库
find_library( #自定义的名字,链接的时候直接通过这个log-lib进行链接即可
             log-lib

             #找到系统库中的liblog.so
              log )

#连接库
target_link_libraries( # 链接到总库.
                       native-lib
					   # 通过名字链接系统库
                       ${log-lib}
					   #链接自己导入的库
                        fmod
                        fmodL
        )

CMake的语法

#打印log
#这里的log不会在控制台输出,需要在cmake_server_log查看。需要Build或者Sync Now 才会看到
#(无) = 重要消息
#STATUS = 非重要消息
#WARNING = 警告,继续执行
#AUTHOR_WARNING= 警告(dev),继续执行
#SEND_ERROR= 错误,继续执行,但是会跳过生成步骤
#FATAL_ERROR = 错误,终止所有处理过程
message("IMPORTANT MSG -----------")
message(STATUS "NORMAL MSG-----------")

#变量声明,所有的变量都是String
set(var 666)
message("var = "${var})
#移除变量
unset(var)
message("var = "${var})

#列表 写法一
set(list_var1 1 2 3 4 5 6)
message("list_var1 = ${list_var1}")

#列表 写法二
set(list_var2 "1;2;3;4;5;6")
message("list_var2 = ${list_var2}")

#条件控制
#true(1,ON,YES,TRUE,Y,非0的值)
#false(0,OFF,NO,FALSE,N,IGNORE,NOTFOUND)
set(isTap OFF) #定义一个变量isTap为false
set(elseTap ON) #定义一个变量elseTap 为true

if(${isTap})
    message("is tap")
    elseif(${elseTap})
    message("else tap")
    else()
    message("all false")
    endif()



#while循环,因为定义的变量都是字符串,所以用这种形式表现
set(a "")
while(NOT a STREQUAL "xxx")
    set(a "${a}x")
    message("a == ${a}")
    endwhile()

#foreach
foreach(item 1 2 3)
    message("item  == ${item}")
    endforeach()

#范围取值
foreach(item RANGE 5)
    message("item2 = ${item}")
    endforeach()

#范围内间隔取值,从1到6 每+2取值 ,最终结果为 1,3,5
foreach(item RANGE 1 6 2)
    message("item3 == ${item}")
    endforeach()


在这里插入图片描述

动态库与静态库的区别

静态库是在编译阶段就把库中代码合并到了总库里。
动态库是在运行阶段根据编译生成的方法对应的地址,去查找的函数,从而执行(地址回填)。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值