# --------------------------------------------------------------------------- # 安装规则与打包(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 # 看文件清单 # dpkg -I # 看控制信息 / 依赖 # sudo apt install ./ # # 说明与取舍见 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 " 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)