# Sets the minimum version of CMake required to build the native
# library. You should either keep the default value or only pass a
# value of 3.4.0 or lower.
cmake_minimum_required(VERSION 3.4.1)
#####################################################################
# 这个是设置了编译C的参数,这里使用C99并开启三级优化
# 类似的设置还有CMAKE_CPP_FLAGS就是设置编译C++的参数
# 更多的参数就要根据需要看文档了
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -std=c99")
#####################################################################
# 这个函数是用来编译库的,主要是so文件和a文件。
add_library( # 括号不在这一行语法错误
# 库的名字自定义的
PNG
# static 就是a文件,shared 就是so文件
STATIC
# 这里提供的是预编译好的文件,所以用这个imported,
# 否则需要提供需要编译文件的列表
IMPORTED
)
# 设置编译库文件的属性,有很多属性设置,根据需要查看文档
set_target_properties(
# 设置哪个库的编译属性
PNG
# 上面的PNG库是预编译的,这里的属性表示文件所在的位置
PROPERTIES IMPORTED_LOCATION
# 提供预编译文件的位置。
# CMAKE_SOURCE_DIR 是内置变量表示当前CMakeLists.txt的位置。
# 这里需要提供绝对路径所以需要这个变量,
# 下面会看到所有的设置都是相对于当前文件的。但这个设置需要绝对路径。
# ANDROID_ABI内置变量,会根据当前编译的平台分配一个文件夹名字,
# 比如armeabi-v7a, armeabi,x86等等
${CMAKE_SOURCE_DIR}/PNG/Prebuilt/Android/${ANDROID_ABI}/libpng.a
)
#####################################################################
# 表示编译文件时候,头文件的位置。路径是相对于当前文件的
# 正确设置了这个路径,在IDE中代码头文件也会正确索引。否则会无法定位头文件。
# 这里我们提供了代码的文件的根目录和PNG库的头文件目录
include_directories(
../../../
../../External/PNG/Include/Android/
)
# 另外一个用法。编译so文件,自定义名字叫做NativeLib
# 就像NDK Build的配置一样,需要把源文件列表提供,不需要头文件。
# 这些源文件会编译成一个NativeLib.so文件。
# 值得一提的时候,在NDK Build中,我编译一个没有源文件的so文件,
# 以后把其他的a文件整体连接进来。这里不行,必须提供源文件至少一个。
add_library(
NativeLib SHARED
../../Toolkit/Toolkit.c
../../Toolkit/Math/Math.c
../../Toolkit/Math/Matrix.c
../../Toolkit/Math/TweenEase.c
../../Toolkit/Utils/Array.c
../../Toolkit/Utils/ArrayList.c
../../Toolkit/Utils/ArrayStrMap.c
../../Toolkit/Utils/ArrayIntMap.c
../../Toolkit/Utils/ArrayQueue.c
../../Toolkit/Utils/BufferReader.c
../../Toolkit/Utils/Json.c
../../Toolkit/Utils/Tween.c
../../Toolkit/Utils/TweenTool.c
../../Toolkit/Platform/File.c
)
# 这是编译一个a文件。可见此函数可以使用任意多个,编译出多个库文件。
add_library(
EntryLink STATIC
../../Application/EntryLink.c
)
# 这是连接一个库文件。在库文件使用了平台,或是预编译库的接口文件,就需要在此连接。
# 才能在运行时正确调用到这些接口函数。
target_link_libraries(
# 需要连接的库名字,上面定义的任何一个库都行。
NativeLib
# 这里奇怪的参数,是让PNG这个库直接拷贝到NativeLib里面。
# 因为并不打算把PNG这个库单独载入,平台也不一定有这个库,
# 于是就整体复制到NativeLib.so里面
"-Wl,--whole-archive"
PNG
"-Wl,--no-whole-archive"
# 这个库存在的意义是
# 比如我在NativeLib用到了一些接口函数,希望留给另外一个库使用。
# 连接的时候,不提供另外一个库,或是那个库还没编译。就会连接失败找不到函数实现。
# 所以我们用这个库实现空的函数,用作连接。
# 并不会放到NativeLib.so里。真正运行的时候,有别的so库文件提供。
EntryLink
# 以下就是Android平台提供的库直接写名字就行了。官方文档有说明哪些。
android
EGL
GLESv2
log
z
)
add_library(gmath STATIC src/gmath.c)
set_target_properties(gmath
PROPERTIES
# 拷贝到下面的指定目录,注意这个属性名,这是拷贝a文件的。
ARCHIVE_OUTPUT_DIRECTORY
${CMAKE_CURRENT_SOURCE_DIR}/lib/${ANDROID_ABI})
add_library(gperf SHARED src/gperf.c)
set_target_properties(gperf
PROPERTIES
# 拷贝到下面的指定目录,注意这个属性名,这是拷贝so文件的。
LIBRARY_OUTPUT_DIRECTORY
${CMAKE_CURRENT_SOURCE_DIR}/lib/${ANDROID_ABI})
# Sets the minimum version of CMake required to build the native
# library. You should either keep the default value or only pass a
# value of 3.4.0 or lower.
cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_VERBOSE_MAKEFILE ON)
#####################################################################
# 第一个参数表示需要加载的子目录CMakeLists.txt文件目录
# 第二个参数表示编译这个文件内容的中间文件目录
# 都是绝对路径,所以我们使用了内置变量,来跨平台
add_subdirectory(
${CMAKE_SOURCE_DIR}/../../../NativeLib/Build/Android/
${CMAKE_SOURCE_DIR}/../../../NativeLib/Build/Android/Bin/
)
#####################################################################
include_directories(
../../../
)
add_library(
Development SHARED
../AppInit.c
../Tool.c
../GameMap.c
../Hero.c
../Enemy.c
../EnemyAI.c
../GameActor.c
)
#####################################################################
target_link_libraries(
Development
NativeLib
)
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion '25.0.0'
defaultConfig {
applicationId 'com.test.development'
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName '1.0'
ndk {
// 这里控制NDK编译哪些类型的ABI so文件,用来适配不同平台
abiFilters 'armeabi-v7a'
}
externalNativeBuild {
// 使用cmake,还可以使用ndk
cmake {
arguments '-DANDROID_TOOLCHAIN=clang',
'-DANDROID_STL=system'
cFlags '-std=c99'
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
// 定位文件,link的时候自动生成
path '../../Build/Android/CMakeLists.txt'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有