FaceRecog/CMakeLists.txt

117 lines
3.9 KiB
CMake
Raw Normal View History

2025-10-30 18:37:30 +08:00
# -----------------------------------------------------------------
# 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 操作
)