cmake_minimum_required(VERSION 3.22.1)
Sets the minimum CMake version required for this project.
最小支持的CMake版本
project("jnitest")
Declares the project name. The project name can be accessed via
${ PROJECT_NAME}
, Since this is the top level CMakeLists.txt, the project name is also accessiblewith${CMAKE_PROJECT_NAME}
(both CMake variables are in-sync within the top level build script scope).通俗意义上讲呢,就是JNI的项目名称,可以用
${CMAKE_PROJECT_NAME}
获取到这个名称在其他地方使用
include_directories( include asn basetools codec )
导入头文件目录,以便在代码中
include
,没有这个其他目录下的头文件是找不到的
add_subdirectory(asn)
添加子项目到当前项目中,不添加的话代码是连接不到的
find_library(log-lib log)
这个玩意就是寻找NDK中的so库,然后可以给它起别名
log
是需要的NDK库
log-lib
是给log
库起的名称,后面要使用的话就要用${log-lib}
add_library(alarm SHARED IMPORTED)
add_library(${CMAKE_PROJECT_NAME} SHARED native-lib.cpp alarm_so.cpp)
add_library(alarm SHARED IMPORTED)
中alarm
表示so库的名称,不必与任何东西相同,就是指定一个so库的名字,方便后面使用;
SHARED
代表库是共享的,作用还未知IMPORTED
表示引入外部so库,需配合set_target_properties()
使用- 不使用
IMPORTED
,而是直接写入cpp文件列表,用空格分开,就是将指定文件打成so,以第一个参数作为命名(${CMAKE_PROJECT_NAME}
或者别的什么),需配合target_link_libraries()
使用
set_target_properties( alarm PROPERTIES IMPORTED_LOCATION ../../../../libs/armeabi-v7a/libalarm.so )
引入外部so库,第一个参数与
add_library
的第一个参数相同,IMPORTED_LOCATION
后面跟so的相对路径
target_link_libraries(${CMAKE_PROJECT_NAME} asn basetools codec android ${log-lib} paho-mqtt3c alarm)
Specifies libraries CMake should link to your target library. You can link libraries from various origins, such as libraries defined in this build script, prebuilt third-party libraries, or Android system libraries.
CMake编译需要链接哪些库,就是代码中使用到的库,这里都要添加,不然编译不过,但是会不会打到so库中就不知道了(应该是会的吧)