CMake基本配置与注意事项
CMake
在android studio 2.2及以上,构建原生库的默认工具是 CMake。
CMake是一个跨平台的构建工具,可以用简单的语句来描述所有平台的安装(编译过程)。能够输出各种各样的makefile或者project文件。Cmake 并不直接建构出最终的软件,而是产生其他工具的脚本(如Makefile ),然后再依这个工具的构建方式使用。
CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。从而达到跨平台的目的。Android Studio利用CMake生成的是ninja,ninja是一个小型的关注速度的构建系统。我们不需要关心ninja的脚本,知道怎么配置cmake就可以了。从而可以看出cmake其实是一个跨平台的支持产出各种不同的构建脚本的一个工具。
CMake的脚本名默认是CMakeLists.txt,cmake最低版本:cmake_minimum_required(VERSION 3.6.0)
现在到android studio中使用cmakelist NDK中已经有一部分预构建库 ndk库已经是被配置为cmake搜索路径的一部分 所以可以
findLibrary(log-lib log)
target_link_libraries( native-lib ${log-lib} )
设置cflag和cxxflag
定义预编译宏:TEST
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST" )
set(CMAKE_Cxx_FLAGS "${CMAKE_Cxx_FLAGS} -DTEST" ) //c++: CMAKE_CXX_FLAGS
其实直接这样就行
target_link_libraries( native-lib log )
添加其他预编译库(已经提前编译好的库)
使用 IMPORTED 标志告知 CMake 只希望将库导入到项目中
如果是静态库则将shared改为static
add_library( imported-lib
SHARED
IMPORTED )
参数分别为:库、属性、导入地址、so所在地址
set_target_properties(
imported-lib
PROPERTIES
IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/src/${ANDROID_ABI}/libimported-lib.so )
为了确保 CMake 可以在编译时定位头文件,这样就可以使用 #include 引入,否则需要使用 #include "path/xx"
include_directories( imported-lib/include/ )
native-lib 是自己编写的源码最终要编译出的so库
target_lin