cmake
简而言之,cmake是Android Ndk开发过程中用到的C/C++编译工具,用来生成动态库(.so文件)。实现方式是通过项目下的CMakeLists.txt来指定编译的规则,即如何组织C/C++代码进行编译。
语法简介
以下是通过AS3.5新建的Ndk项目CMakeLists.txt的基础内容。
#1
cmake_minimum_required(VERSION 3.4.1)
#2
add_library(native-lib SHARED native-lib.cpp)
#3
find_library(log-lib log)
#4
target_link_libraries(native-lib log)
#1
指定cmake版本号
#2
添加一个target,类型是动态库。
add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
source1 [source2 ...])
该方法有三个参数,第一个指定target的名字,最终生成的文件名是lib<name>.so
。第二个指定编译类型,可用的有[STATIC | SHARED | MODULE]
,STATIC代表编译静态库即生成的结果是.a文件;SHARED代表编译动态库即通常用到的动态库.so文件;MODULE一般情况下用不上。第三个参数是源码的参数列表,即C/C++代码源文件路径。
#3
查找已存在的库路径并存在变量中,在这里是将Android的log库放在变量log-lib中。在实际情况下我发现ndk自带的库可以省略此步骤,直接在第四步链接的时候指定库名就行了,cmake会自动搜索默认路径寻找相应库文件。
#4
将log库与我们自己的native-lib库进行链接,也就是C/C++编译过程(预处理、编译、汇编、链接)的第四步链接的过程,这里就不展开叙述了。
以上就是CMakeLists.txt文件内容的基本介绍。
target
target是指通过add_executable()
或者 add_library()
命令创建的变量。
target_include_directories与include_directories的区别
这两个命令都是用来指定.h头文件的路径,区别在于目录的范围不同。前者指定某个具体target的头文件路径,可以更好的控制头文件的可见性。而后者则是全局的类型,会对所有target指定头文件的路径。
网友评论