android开发cmake编译多个有相互依赖的c/cpp模块源代码的配置方法
1. 项目目录结构配置如下:
root-project
cpp1Project
/src/main/c/CMakeLists.txt
cpp2Project
/src/main/cpp/CMakeLists.txt
CMakeLists.txt
2. root-project根目录下的build.gradle配置如下:
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_shared', '-DCMAKE_VERBOSE_MAKEFILE=ON'
cppFlags '-Wl,--gc-sections', '-fno-exceptions', '-fno-rtti', '-fvisibility=hidden'
cFlags '-Wl,--gc-sections', '-fvisibility=hidden'
abiFilters = ["armeabi-v7a"]
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
ndk{
abiFilters = ["armeabi-v7a"]
}
3. root-project根目录下的CMakeLists.txt配置如下:
cmake_minimum_required(VERSION 3.4.1)
add_subdirectory(cpp1Project/src/main/c)
add_subdirectory(cpp2Project/src/main/cpp)
4. cpp1Project下生成libhook.a静态库的CMakeLists.txt文件配置如下:
cmake_minimum_required(VERSION 3.4.1)
project(hook C)
set(hook_source_dir ${CMAKE_CURRENT_SOURCE_DIR})
set(hook_source
${hook_source_dir}/core.c
${hook_source_dir}/hook.c
...)
add_library(hook STATIC ${hook_source})
find_library(log-lib log)
target_include_directories(hook PUBLIC ${hook_source_dir})
target_link_libraries(xhook ${log-lib})
5. cpp2Project下生成libtrace.so动态库(依赖libhook.a静态库)的CMakeLists.txt文件配置如下:
cmake_minimum_required(VERSION 3.4.1)
project(trace CPP)
include_directories(
${CMAKE_SOURCE_DIR}
)
include_directories(${CMAKE_SOURCE_DIR}/cpp1Project/src/main/c/hook/)
add_library(trace SHARED Trace.cc)
target_link_libraries(trace
log
hook)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
2020-05-13 OpenGLES以及shader开发调试工具