impress_voice_input/cmake/dependencies.cmake
impressionyang e36fb1d931 feat: 添加 Windows 依赖下载与配置脚本
1. scripts/setup_deps_windows.ps1
   - 自动检测 Qt 5.12 MinGW 工具链路径
   - 下载 ONNX Runtime Windows x64 预编译库 (1.21.0)
   - 从源码编译 PortAudio (MinGW WASAPI+WMME)
   - 将库文件放入 third_party/*/lib/win64/ 子目录
   - 可视化依赖安装状态汇总

2. cmake/dependencies.cmake
   - ONNX Runtime: Windows 查找 win64/lib/ 子目录
   - 自动将 onnxruntime.dll 复制到输出目录
   - PortAudio: 保持 win64/macos/linux 平台分离

3. CMakeLists.txt
   - Windows 链接 winmm ksuser setupapi ole32 (PortAudio 需要)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-13 18:12:26 +08:00

101 lines
3.5 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.

include(FetchContent)
set(THIRD_PARTY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party")
# ----------------------------------------------------------------------------
# ONNX Runtime
# ----------------------------------------------------------------------------
set(ONNXRUNTIME_ROOT "${THIRD_PARTY_DIR}/onnxruntime")
# Windows 需要预编译的 Windows 版本,与 Linux 分开存放
if(WIN32)
set(ONNXRUNTIME_LIB_PATH "${ONNXRUNTIME_ROOT}/win64/lib")
set(ONNXRUNTIME_BIN_PATH "${ONNXRUNTIME_ROOT}/win64/bin")
else()
set(ONNXRUNTIME_LIB_PATH "${ONNXRUNTIME_ROOT}/lib")
endif()
find_library(ONNXRUNTIME_LIB
NAMES onnxruntime onnxruntime.lib
PATHS "${ONNXRUNTIME_LIB_PATH}"
NO_DEFAULT_PATH
)
find_path(ONNXRUNTIME_INCLUDE_DIR
NAMES onnxruntime_cxx_api.h
PATHS "${ONNXRUNTIME_ROOT}/include"
NO_DEFAULT_PATH
)
if(ONNXRUNTIME_LIB AND ONNXRUNTIME_INCLUDE_DIR)
set(ONNXRUNTIME_LIBRARIES ${ONNXRUNTIME_LIB})
set(ONNXRUNTIME_INCLUDE_DIRS ${ONNXRUNTIME_INCLUDE_DIR})
message(STATUS "找到 ONNX Runtime: ${ONNXRUNTIME_LIB}")
add_compile_definitions(HAVE_ONNXRUNTIME)
# Windows 需要将 DLL 复制到输出目录
if(WIN32 AND EXISTS "${ONNXRUNTIME_BIN_PATH}")
file(GLOB ONNX_DLLS "${ONNXRUNTIME_BIN_PATH}/*.dll")
foreach(DLL ${ONNX_DLLS})
get_filename_component(DLL_NAME ${DLL} NAME)
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${DLL}"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/${DLL_NAME}"
COMMENT "复制 ${DLL_NAME} 到输出目录"
)
endforeach()
endif()
else()
message(WARNING "未找到 ONNX Runtime推理功能将使用占位实现")
endif()
# ----------------------------------------------------------------------------
# PortAudio
# ----------------------------------------------------------------------------
set(PORTAUDIO_ROOT "${THIRD_PARTY_DIR}/portaudio")
# Windows 需要 MinGW 编译的版本,与 Linux 分开存放
if(WIN32)
set(PORTAUDIO_LIB_PATH "${PORTAUDIO_ROOT}/lib/win64")
elseif(APPLE)
set(PORTAUDIO_LIB_PATH "${PORTAUDIO_ROOT}/lib/macos")
else()
set(PORTAUDIO_LIB_PATH "${PORTAUDIO_ROOT}/lib")
endif()
find_library(PORTAUDIO_LIB
NAMES portaudio libportaudio
PATHS "${PORTAUDIO_LIB_PATH}"
NO_DEFAULT_PATH
)
find_path(PORTAUDIO_INCLUDE_DIR
NAMES portaudio.h
PATHS "${PORTAUDIO_ROOT}/include"
NO_DEFAULT_PATH
)
if(PORTAUDIO_LIB AND PORTAUDIO_INCLUDE_DIR)
set(PORTAUDIO_LIBRARIES ${PORTAUDIO_LIB})
set(PORTAUDIO_INCLUDE_DIRS ${PORTAUDIO_INCLUDE_DIR})
message(STATUS "找到 PortAudio: ${PORTAUDIO_LIB}")
add_compile_definitions(HAVE_PORTAUDIO)
else()
message(WARNING "未找到 PortAudio音频采集功能将使用占位实现")
endif()
# ----------------------------------------------------------------------------
# dr_libs (header-only)
# ----------------------------------------------------------------------------
set(DR_LIBS_INCLUDE_DIR "${THIRD_PARTY_DIR}/dr_libs")
if(EXISTS "${DR_LIBS_INCLUDE_DIR}/dr_wav.h")
message(STATUS "找到 dr_libs: ${DR_LIBS_INCLUDE_DIR}")
add_compile_definitions(HAVE_DR_LIBS)
else()
message(WARNING "未找到 dr_libs 头文件")
endif()
# ----------------------------------------------------------------------------
# nlohmann/json (header-only)
# ----------------------------------------------------------------------------
set(NLOHMANN_JSON_INCLUDE_DIR "${THIRD_PARTY_DIR}/nlohmann_json")