Cmake.txet简单总结

Cmake的总结:

1:add_library()把需要编译的类库(c的源文件)都添加进来。

2:find_library( log-lib log )找到ndk中提供的类库添加进来,其中log-lib是key,log是value,根据key可以找到我们需要的系统类库。

3:add_library( imported-lib SHARED

    IMPORTED ),可以把一个编译好的类库(*•so也添加进来)

4:设置添加进来的各个类库之间的依赖关系target_link_libraries( native-lib imported-lib app-glue ${log-lib} )

第一个参数是目标类库,后面的参数是目标类库要依赖的其他类库,可以配置多个,在这里配置了三个。

5:可以添加的类库分为三种:A自己的c代码编译的类库B已经编译好的类库C系统提供的类库(比方说log库)

6:build.gradle中配置的是构建app的配置参数,Cmake.text中配置的是编译native的参数,为了在编译app的时候也编译native代码,需要把cmake和build.gradle关联起来,以便使用cmake的脚本来编译.so库文件,所以需要在build.gradle中配置camake.text的路径。

6:你需要在 module 层级的 build.gradle 文件中添加externalNativeBuild {}代码块,并且在该代码块中配置cmake {}或ndkBuild {}:

android {

...

defaultConfig {...}

buildTypes {...}

// Encapsulates your external native build configurations.

externalNativeBuild {

// Encapsulates your CMake build configurations.

cmake {

// Provides a relative path to your CMake build script.

path "CMakeLists.txt"

}

}

}

7除了可以配置Cmake.text的路径之外还可以配置cmake编译时的属性,你可以在你的 module 层级的 build.gradle 文件中的defaultConfig {}代码块中,添加externalNativeBuild {}代码块,为 CMake 或 ndk-build 配置一些额外参数。当然,你也可以在你的构建配置中的其他每一个生产渠道重写这些属性。

比如,如果你的 CMake 或者 ndk-build 项目中定义了多个本地库,你想在某个生产渠道使用这些本地库中的几个,你就可以使用targets属性来构建和打包。下面的代码展示了一些你可能会用到的属性:

android {

...

defaultConfig {

...

// This block is different from the one you use to link Gradle

// to your CMake or ndk-build script.

externalNativeBuild {

// For ndk-build, instead use ndkBuild {}

cmake {

// Passes optional arguments to CMake.

arguments "-DCMAKE_VERBOSE_MAKEFILE=TRUE"

// Sets optional flags for the C compiler.

cFlags "-D_EXAMPLE_C_FLAG1", "-D_EXAMPLE_C_FLAG2"

// Sets a flag to enable format macro constants for the C++ compiler.

cppFlags "-D__STDC_FORMAT_MACROS"

}

}

}

buildTypes {...}

productFlavors {

...

demo {

...

externalNativeBuild {

cmake {

...

// Specifies which native libraries to build and package for this

// product flavor. If you don't configure this property, Gradle

// builds and packages all shared object libraries that you define

// in your CMake or ndk-build project.

targets "native-lib-demo"

}

}

}

paid {

...

externalNativeBuild {

cmake {

...

targets "native-lib-paid"

}

}

}

}

// You use this block to link Gradle to your CMake or ndk-build script.

externalNativeBuild {

cmake {...}

// or ndkBuild {...}

}

}

你可能感兴趣的:(Cmake.txet简单总结)