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)