FaceRecog/CMakeLists.txt

120 lines
4.0 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -----------------------------------------------------------------
# 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 库
${OpenCV_LIBS}
# ONNX Runtime 库
onnxruntime
# Android NDK 库
log # 用于 __android_log_print
android # 用于 AConfiguration, AAssetManager 等
jnigraphics # 用于 Android Bitmap 操作
)