# ============================================================ # 闲言APP (WordsLeisure) — Linux CMakeLists.txt # 创建时间: 2026-04-20 # 更新时间: 2026-05-18 # 作用: Linux平台构建配置 # 上次更新: 完善Linux平台构建依赖和桌面集成 # ============================================================ cmake_minimum_required(VERSION 3.13) project(runner LANGUAGES CXX) set(BINARY_NAME "xianyan") set(APPLICATION_ID "apps.xy.xianyan") set(APPLICATION_NAME "闲言") set(APPLICATION_VERSION "5.2.0") cmake_policy(SET CMP0063 NEW) set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") if(FLUTTER_TARGET_PLATFORM_SYSROOT) set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) endif() if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Flutter build mode" FORCE) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Profile" "Release") endif() function(APPLY_STANDARD_SETTINGS TARGET) target_compile_features(${TARGET} PUBLIC cxx_std_14) target_compile_options(${TARGET} PRIVATE -Wall -Werror) target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") endfunction() set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") add_subdirectory(${FLUTTER_MANAGED_DIR}) # === System-level dependencies === find_package(PkgConfig REQUIRED) # GTK3 — Flutter Linux核心GUI框架 pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) # GStreamer — audioplayers_linux / record_linux 音频录制播放 pkg_check_modules(GSTREAMER IMPORTED_TARGET gstreamer-1.0) pkg_check_modules(GSTREAMER_BASE IMPORTED_TARGET gstreamer-base-1.0) # libmpv — 视频播放后备(如需media_kit) pkg_check_modules(MPV IMPORTED_TARGET mpv) # Bluetooth — flutter_blue_plus Linux BLE支持 pkg_check_modules(BLUEZ IMPORTED_TARGET bluez) # ALSA — 音频底层驱动 pkg_check_modules(ALSA IMPORTED_TARGET alsa) # libnotify — 系统通知(flutter_local_notifications) pkg_check_modules(LIBNOTIFY IMPORTED_TARGET libnotify) # libsecret — flutter_secure_storage Linux密钥存储 pkg_check_modules(LIBSECRET IMPORTED_TARGET libsecret) # X11 — 屏幕信息/窗口管理辅助 pkg_check_modules(X11 IMPORTED_TARGET x11) # DBus — 网络信息/电池/设备信息等系统服务 pkg_check_modules(DBUS_GLIB IMPORTED_TARGET dbus-glib-1) add_subdirectory("runner") add_dependencies(${BINARY_NAME} flutter_assemble) set_target_properties(${BINARY_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" ) include(flutter/generated_plugins.cmake) # === Installation === set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) endif() install(CODE " file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") " COMPONENT Runtime) set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" COMPONENT Runtime) install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime) foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) install(FILES "${bundled_library}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime) endforeach(bundled_library) set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") install(DIRECTORY "${NATIVE_ASSETS_DIR}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime) set(FLUTTER_ASSET_DIR_NAME "flutter_assets") install(CODE " file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") " COMPONENT Runtime) install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime) endif() # === Desktop Integration === install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/apps.xy.xianyan.desktop" DESTINATION "${CMAKE_INSTALL_PREFIX}/" COMPONENT Runtime) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/apps.xy.s2ss.comdata.xml" DESTINATION "${CMAKE_INSTALL_PREFIX}/" COMPONENT Runtime)