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>
101 lines
3.5 KiB
CMake
101 lines
3.5 KiB
CMake
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")
|