cmake_minimum_required(VERSION 3.16) project(kiosk-shell CXX) # 对应《VDI 云桌面软件开发方案》2.2 节技术栈定版: # kiosk 用 C/C++/Qt;会话通道统一 Moonlight(RDP 渲染管线已移除,代码存于 git 历史) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() # ---- Qt5 ---- find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets Network) include(CTest) set(KIOSK_SOURCES resources/brand.qrc src/main_window.cpp src/login_page.cpp src/desktop_list_page.cpp src/desktop_settings_dialog.cpp src/desktop_service.cpp src/platform_client.cpp src/system_metrics.cpp src/terminal_policy.cpp src/desktop_store.cpp src/moonlight_session.cpp src/transition_overlay.cpp src/state_machine.cpp src/config.cpp ) add_executable(kiosk-shell src/main.cpp ${KIOSK_SOURCES}) target_include_directories(kiosk-shell PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ) target_link_libraries(kiosk-shell PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Network ) if(UNIX AND NOT APPLE) find_package(X11 REQUIRED) target_link_libraries(kiosk-shell PRIVATE X11::X11) endif() # 看门狗 Monitor:独立进程,监控主进程假死/崩溃 add_executable(vdi-kiosk-monitor src/monitor_main.cpp src/monitor.cpp ) target_include_directories(vdi-kiosk-monitor PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ) find_package(Threads REQUIRED) target_link_libraries(vdi-kiosk-monitor PRIVATE Threads::Threads) if(BUILD_TESTING) find_package(Qt5 REQUIRED COMPONENTS Test) add_executable(test-system-metrics tests/test_system_metrics.cpp src/system_metrics.cpp) target_include_directories(test-system-metrics PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) target_link_libraries(test-system-metrics PRIVATE Qt5::Core Qt5::Test) add_test(NAME system-metrics COMMAND test-system-metrics) add_executable(test-terminal-policy tests/test_terminal_policy.cpp src/terminal_policy.cpp) target_include_directories(test-terminal-policy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) target_link_libraries(test-terminal-policy PRIVATE Qt5::Core Qt5::Test) add_test(NAME terminal-policy COMMAND test-terminal-policy) if(UNIX) find_package(Python3 REQUIRED COMPONENTS Interpreter) add_test(NAME display-guard COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_display_guard.py) endif() add_executable(test-moonlight-session tests/test_moonlight_session.cpp src/moonlight_session.cpp ) target_include_directories(test-moonlight-session PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ) target_link_libraries(test-moonlight-session PRIVATE Qt5::Core Qt5::Test ) add_test(NAME moonlight-session COMMAND test-moonlight-session) add_executable(test-desktop-list-page tests/test_desktop_list_page.cpp src/desktop_list_page.cpp resources/brand.qrc ) target_include_directories(test-desktop-list-page PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ) target_link_libraries(test-desktop-list-page PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Test ) add_test(NAME desktop-list-page COMMAND test-desktop-list-page) set_tests_properties(desktop-list-page PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen" ) # Render the native page at target resolutions without occupying the display. add_executable(preview-desktop-list tests/preview_desktop_list.cpp src/desktop_list_page.cpp resources/brand.qrc) target_include_directories(preview-desktop-list PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) target_link_libraries(preview-desktop-list PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets) add_executable(test-main-window tests/test_main_window.cpp ${KIOSK_SOURCES}) target_include_directories(test-main-window PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) target_link_libraries(test-main-window PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Network Qt5::Test) if(UNIX AND NOT APPLE) target_link_libraries(test-main-window PRIVATE X11::X11) endif() add_test(NAME main-window-boot COMMAND test-main-window) set_tests_properties(main-window-boot PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen;DISPLAY=" ) endif() install(TARGETS kiosk-shell vdi-kiosk-monitor RUNTIME DESTINATION bin)