了解cmake

什么是cmake

cmake是一个跨平台的构建工具,主要是用来解决不同平台上Makefile不同的问题,通过编写CMakeLists.txt文件,然后通过cmake命令自动生成对应平台的Makefile。

编写CMakeLists

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 指定运行此配置文件所需的 CMake 的最低版本
cmake_minimum_required(VERSION 3.4.1)

// 该指令的主要作用就是将指定的源文件生成链接文件,然后添加到工程中去。
// native-lib表示生成的链接文件的名字。
// SHARED表示生成的文件类型:STATIC类型在链接其它目标的时候使用。SHARED库会被动态链接,在运行时会被加载。MODULE库是一种不会被链接到其它目标中的插件,但是可能会在运行时使用dlopen-系列的函数。
// native-lib.cpp 表示源文件,可以有多个。
add_library(native-lib SHARED native-lib.cpp)

// 查找一个库,log库已经包含在NDK中。
// log-lib用来存储查找结果
// log 表示查找库的名字
find_library(log-lib log)

// 为了确保CMake可以在编译时定位您的标头文件,使用该命令来指定包含标头文件的路径
include_directories(${openCVPath}/native/jni/include)

// set用来设置一些变量
// CMAKE_CURRENT_SOURCE_DIR 表示当前CMakeLists所在的目录
set(openCVPath ${CMAKE_SOURCE_DIR}/../../../../opencv-sdk )

// 使用static来添加依赖库,IMPORTED表示您只希望将库导入到项目中,
// 然后需要通过set_target_properties来指定库的路径
add_library(lib_opencv STATIC IMPORTED)

// lib_opencv就是上面导入的库的变量
// PROPERTIES 表示设置属性
// IMPORTED_LOCATION 设置导入库的位置
set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION
${openCVPath}/native/libs/${ANDROID_ABI}/libopencv_java4.so)

// 将预构建库关联到您自己的原生库
// native-lib库就是原生库,将上面查找的系统库和添加的依赖库都链接到目标库上。
target_link_libraries(native-lib ${log-lib} lib_opencv)

运行cmake

运行cmake只需要执行cmake命令,后面跟上CMakeLists所在的目录位置,运行后在当前目录中生成Makefile。

1
cmake .

然后再在当前目录执行make命令,就可以生成对应的项目编译文件。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×