cmake_minimum_required(VERSION 3.24) project(live-caption LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE) endif() # --------------------------------------------------------------------------- # llama.cpp / libmtmd 的搜索路径 # # Debian/Deepin 把 llama 的 CMake config 放在非标准目录 cmake-private/, # 而 pkg-config 的 llama.pc 又漏了 -lmtmd。所以这里把两个路径都塞进搜索前缀, # 并单独用 find_library 找 mtmd。 # --------------------------------------------------------------------------- foreach(_p /usr/lib/x86_64-linux-gnu/llama /usr/lib/x86_64-linux-gnu/llama/cmake-private /usr/lib/x86_64-linux-gnu/llama/pkgconfig) if(EXISTS "${_p}") list(APPEND CMAKE_PREFIX_PATH "${_p}") set(ENV{PKG_CONFIG_PATH} "${_p}:$ENV{PKG_CONFIG_PATH}") endif() endforeach() find_package(Qt6 REQUIRED COMPONENTS Core Widgets) find_package(PkgConfig REQUIRED) find_package(Threads REQUIRED) set(CMAKE_AUTOMOC ON) pkg_check_modules(SAMPLERATE REQUIRED IMPORTED_TARGET samplerate) pkg_check_modules(PULSE REQUIRED IMPORTED_TARGET libpulse) # --- llama:优先系统 pkg-config,其次 CMake config,最后 FetchContent 兜底 --- pkg_check_modules(LLAMA QUIET IMPORTED_TARGET llama) if(LLAMA_FOUND) set(LC_LLAMA_TARGET PkgConfig::LLAMA) message(STATUS "llama: 使用系统 pkg-config (${LLAMA_VERSION})") else() message(STATUS "llama: 系统未找到,改用 FetchContent 拉取固定版本") include(FetchContent) set(FETCHCONTENT_TRY_FIND_PACKAGE_MODE ALWAYS) # 先 find_package,失败再拉源码 FetchContent_Declare(llama GIT_REPOSITORY https://github.com/ggml-org/llama.cpp.git GIT_TAG b9951 FIND_PACKAGE_ARGS NAMES llama CONFIG) set(LLAMA_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(LLAMA_BUILD_SERVER OFF CACHE BOOL "" FORCE) set(LLAMA_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) FetchContent_MakeAvailable(llama) set(LC_LLAMA_TARGET llama) endif() # --- mtmd:llama.pc 里没有,单独找 --- find_library(LC_MTMD_LIB NAMES mtmd HINTS /usr/lib/x86_64-linux-gnu/llama) if(NOT LC_MTMD_LIB) message(FATAL_ERROR "找不到 libmtmd(应随 libllama0 一起安装)") endif() message(STATUS "mtmd: ${LC_MTMD_LIB}") # --------------------------------------------------------------------------- add_executable(live-caption-cli src/main.cpp src/transcript.cpp src/qwen3asr.cpp src/streamingasr.cpp src/audio.cpp src/livetranscriber.cpp src/captionwindow.cpp ) target_include_directories(live-caption-cli PRIVATE src) target_link_libraries(live-caption-cli PRIVATE Qt6::Core Qt6::Widgets Threads::Threads PkgConfig::SAMPLERATE PkgConfig::PULSE ${LC_LLAMA_TARGET} ${LC_MTMD_LIB} ) if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") target_compile_options(live-caption-cli PRIVATE -Wall -Wextra -Wno-unused-parameter) endif()