118 lines
5.7 KiB
CMake
118 lines
5.7 KiB
CMake
# ---------------------------------------------------------------------------
|
||||
|
|
# 安装规则与打包(CPack → .deb)
|
|||
|
|
#
|
|||
|
|
# cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
|
|||
|
|
# cmake --build build -j
|
|||
|
|
# cpack --config build/CPackConfig.cmake # 产 deb
|
|||
|
|
# cpack --config build/CPackConfig.cmake -G DEB # 只产 deb 更明确
|
|||
|
|
#
|
|||
|
|
# 产物:build/live-caption_<版本>-<修订>_<架构>.deb
|
|||
|
|
# dpkg -c <deb> # 看文件清单
|
|||
|
|
# dpkg -I <deb> # 看控制信息 / 依赖
|
|||
|
|
# sudo apt install ./<deb>
|
|||
|
|
#
|
|||
|
|
# 说明与取舍见 docs/packaging.md。
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
include(GNUInstallDirs)
|
|||
|
|
|
|||
|
|
option(LC_INSTALL "生成安装与打包规则" ON)
|
|||
|
|
option(LC_BUNDLE_SHERPA "把 sherpa-onnx 运行时打进包里(流式后端依赖它,而发行版没有对应包)" ON)
|
|||
|
|
option(LC_PACKAGE_STRIP "打包时 strip 二进制(发布建议打开;要用 coredump 调试符号就关掉)" OFF)
|
|||
|
|
|
|||
|
|
if(NOT LC_INSTALL)
|
|||
|
|
return()
|
|||
|
|
endif()
|
|||
|
|
|
|||
|
|
# 包私有库目录。Debian 允许包把自己的私有共享库放在 /usr/lib/<包名>/,
|
|||
|
|
# 这样不必占用 multiarch 目录,也避免和系统库撞名。
|
|||
|
|
# 顶层 CMakeLists.txt 里已经定义(RPATH 要用),这里只是兜底。
|
|||
|
|
if(NOT DEFINED LC_PRIVATE_LIBDIR)
|
|||
|
|
set(LC_PRIVATE_LIBDIR "lib/live-caption")
|
|||
|
|
endif()
|
|||
|
|
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
# 安装规则
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
install(TARGETS live-caption live-caption-cli
|
|||
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|||
|
|
|
|||
|
|
# 桌面入口与图标(GUI 才会出现在应用菜单里;CLI 无入口)
|
|||
|
|
install(FILES data/live-caption.desktop
|
|||
|
|
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
|
|||
|
|
install(FILES data/live-caption.svg
|
|||
|
|
DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps)
|
|||
|
|
|
|||
|
|
# 模型注册表与下载脚本。注意:程序自己也把注册表编进了二进制(qt_add_resources),
|
|||
|
|
# 这里装一份是为了让脚本在没有程序的情况下也能用。
|
|||
|
|
install(FILES data/models.json
|
|||
|
|
DESTINATION ${CMAKE_INSTALL_DATADIR}/live-caption)
|
|||
|
|
install(PROGRAMS scripts/fetch-models.sh
|
|||
|
|
DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|||
|
|
RENAME live-caption-fetch-models)
|
|||
|
|
|
|||
|
|
# sherpa-onnx 运行时:官方只发预编译 tar 包,没有系统包可依赖,
|
|||
|
|
# 所以默认随包携带(约 32MB)。关掉的话流式 ONNX 后端在安装后的机器上会起不来。
|
|||
|
|
if(LC_HAS_SHERPA AND LC_BUNDLE_SHERPA)
|
|||
|
|
install(FILES ${LC_SHERPA_C_API} ${LC_SHERPA_ORT}
|
|||
|
|
DESTINATION ${LC_PRIVATE_LIBDIR})
|
|||
|
|
message(STATUS "打包: sherpa-onnx 运行时会随包安装到 /usr/${LC_PRIVATE_LIBDIR}")
|
|||
|
|
endif()
|
|||
|
|
|
|||
|
|
# 文档
|
|||
|
|
install(FILES README.md DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
|||
|
|
install(FILES docs/gui.md docs/cli.md docs/asr-backends.md docs/troubleshooting.md
|
|||
|
|
DESTINATION ${CMAKE_INSTALL_DOCDIR}/docs)
|
|||
|
|
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
# CPack
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
set(CPACK_GENERATOR "DEB")
|
|||
|
|
set(CPACK_PACKAGE_NAME "live-caption")
|
|||
|
|
set(CPACK_PACKAGE_VENDOR "live-caption")
|
|||
|
|
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
|
|||
|
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
|
|||
|
|
"系统播放音频的实时字幕(类似 Chrome 实时字幕)")
|
|||
|
|
set(CPACK_PACKAGE_INSTALL_DIRECTORY "live-caption")
|
|||
|
|
set(CPACK_PACKAGING_INSTALL_PREFIX "/usr")
|
|||
|
|
set(CPACK_STRIP_FILES ${LC_PACKAGE_STRIP})
|
|||
|
|
|
|||
|
|
# 维护者信息:发布前用 -DLC_DEB_MAINTAINER="名字 <邮箱>" 覆盖(Debian 要求可联系到人)
|
|||
|
|
set(LC_DEB_MAINTAINER "live-caption maintainers <live-caption@example.com>"
|
|||
|
|
CACHE STRING "Debian Maintainer 字段")
|
|||
|
|
set(LC_DEB_HOMEPAGE "" CACHE STRING "Debian Homepage 字段(留空则不写)")
|
|||
|
|
set(CPACK_PACKAGE_CONTACT "${LC_DEB_MAINTAINER}")
|
|||
|
|
|
|||
|
|
# Debian 控制字段
|
|||
|
|
set(CPACK_DEBIAN_PACKAGE_NAME "live-caption")
|
|||
|
|
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${LC_DEB_MAINTAINER}")
|
|||
|
|
set(CPACK_DEBIAN_PACKAGE_SECTION "utils")
|
|||
|
|
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
|
|||
|
|
set(CPACK_DEBIAN_PACKAGE_RELEASE "1") # Debian 修订号
|
|||
|
|
set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") # live-caption_0.1.0-1_amd64.deb
|
|||
|
|
if(NOT LC_DEB_HOMEPAGE STREQUAL "")
|
|||
|
|
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "${LC_DEB_HOMEPAGE}")
|
|||
|
|
endif()
|
|||
|
|
|
|||
|
|
# 维护者脚本:刷新应用菜单与图标缓存(见 data/deb/)
|
|||
|
|
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
|
|||
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/data/deb/postinst;${CMAKE_CURRENT_SOURCE_DIR}/data/deb/postrm")
|
|||
|
|
|
|||
|
|
# 依赖由 dpkg-shlibdeps 从二进制里推出来(libllama0 / libpulse0 / libsamplerate0 /
|
|||
|
|
# Qt6 各库…),比手写列表可靠。包内自带的 sherpa 库(RPATH 指向 $ORIGIN/../lib/
|
|||
|
|
# live-caption)会被识别为私有库,不会变成外部依赖。
|
|||
|
|
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
|||
|
|
# 需要手动补依赖时,用 -DLC_DEB_EXTRA_DEPENDS=... 追加(逗号分隔;给了就覆盖自动结果)
|
|||
|
|
set(LC_DEB_EXTRA_DEPENDS "" CACHE STRING "额外写入 Depends 的包(逗号分隔)")
|
|||
|
|
if(NOT LC_DEB_EXTRA_DEPENDS STREQUAL "")
|
|||
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${LC_DEB_EXTRA_DEPENDS}")
|
|||
|
|
endif()
|
|||
|
|
|
|||
|
|
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION
|
|||
|
|
"实时字幕:采集系统播放声音的输出(monitor),把语音实时转写成字幕并叠加显示。
|
|||
|
|
.
|
|||
|
|
两条推理后端:llama.cpp(Qwen3-ASR 的 GGUF 模型,准确率高、语言最全)与
|
|||
|
|
sherpa-onnx(流式 ONNX 模型,原生流式、CPU 占用低)。模型不随包分发,
|
|||
|
|
首次启动时在设置界面里按需下载(支持镜像与代理断点续传)。")
|
|||
|
|
|
|||
|
|
include(CPack)
|