# ----------------------------------------------------------------- # 1. 项目基本配置 # ----------------------------------------------------------------- cmake_minimum_required(VERSION 3.18) project(FaceSDK CXX) # ----------------------------------------------------------------- # 2. 编译选项 # ----------------------------------------------------------------- # (关键!) 设定C++标准为 C++17 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED True) if(ANDROID) # (关键!) 告诉编译器源文件使用UTF-8编码,避免中文乱码警告 add_compile_options(-finput-charset=UTF-8) # 其他安卓特有的编译选项 add_compile_options(-fexceptions -frtti) endif() # ----------------------------------------------------------------- # 3. 依赖项: OpenCV # ----------------------------------------------------------------- # 注意: OpenCV_DIR 应该由您的 VSCode 'settings.json' 文件传入。 # 我们保留一个默认路径作为备用。 if(NOT OpenCV_DIR) set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/third_party/opencv_android/sdk/native/jni) message(STATUS "OpenCV_DIR not set, defaulting to: ${OpenCV_DIR}") endif() find_package(OpenCV REQUIRED) if(NOT OpenCV_FOUND) message(FATAL_ERROR "OpenCV NOT FOUND. Set OpenCV_DIR in settings.json to the 'sdk/native/jni' directory.") else() message(STATUS "OpenCV FOUND: ${OpenCV_LIBS}") endif() # ----------------------------------------------------------------- # 4. 依赖项: ONNX Runtime (ORT) # ----------------------------------------------------------------- message(STATUS "Configuring ONNX Runtime (ORT)...") # 定义ORT的根目录 (基于您的 "third_party" 结构) set(ORT_ROOT_DIR ${CMAKE_SOURCE_DIR}/third_party/onnxruntime) set(ORT_INCLUDE_DIR ${ORT_ROOT_DIR}/include) if(NOT EXISTS ${ORT_INCLUDE_DIR}) message(FATAL_ERROR "ONNX Runtime 'include' directory not found at ${ORT_INCLUDE_DIR}") endif() # 确定库文件路径 if(ANDROID) # ANDROID_ABI 由 NDK 工具链自动设置 (e.g., "arm64-v8a") message(STATUS "CMake: Configuring for Android ABI: ${ANDROID_ABI}") set(ORT_LIBRARY_PATH ${ORT_ROOT_DIR}/lib/${ANDROID_ABI}/libonnxruntime.so) else() # 为 Windows 本地测试配置 (如果需要) message(STATUS "CMake: Configuring for non-Android (e.g., Windows)") set(ORT_LIBRARY_PATH ${ORT_ROOT_DIR}/lib/win-x64/onnxruntime.lib) endif() if(NOT EXISTS ${ORT_LIBRARY_PATH}) message(FATAL_ERROR "ONNX Runtime library not found. Expected at: ${ORT_LIBRARY_PATH}") endif() # 创建 IMPORTED 库目标 add_library(onnxruntime SHARED IMPORTED) set_target_properties(onnxruntime PROPERTIES IMPORTED_LOCATION "${ORT_LIBRARY_PATH}" ) message(STATUS "ORT Include Dir: ${ORT_INCLUDE_DIR}") message(STATUS "ORT Library: ${ORT_LIBRARY_PATH}") # ----------------------------------------------------------------- # 5. 定义我们的 JNI 库 # ----------------------------------------------------------------- message(STATUS "Defining face_sdk_jni library...") add_library(face_sdk_jni SHARED src/face_pipeline.cpp src/face_sdk_api.cpp src/face_sdk_jni.cpp ) # ----------------------------------------------------------------- # 6. 包含目录 # ----------------------------------------------------------------- target_include_directories(face_sdk_jni PUBLIC # 公开头文件 (include/face_sdk.h) ${CMAKE_CURRENT_SOURCE_DIR}/include # 内部头文件 (src/face_pipeline.h) ${CMAKE_CURRENT_SOURCE_DIR}/src # 依赖项的头文件 ${OpenCV_INCLUDE_DIRS} ${ORT_INCLUDE_DIR} ) # ----------------------------------------------------------------- # 7. 链接库 # ----------------------------------------------------------------- target_link_libraries(face_sdk_jni ${OpenCV_LIBS} onnxruntime log # 用于 __android_log_print android # 用于 AConfiguration, AAssetManager 等 jnigraphics # 用于 Android Bitmap 操作 )