CMakeLists_simple.txt 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. cmake_minimum_required(VERSION 3.16)
  2. # 项目信息
  3. project(SimpleScreenWall VERSION 1.0.0 LANGUAGES CXX)
  4. # 设置C++标准
  5. set(CMAKE_CXX_STANDARD 17)
  6. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  7. # 设置构建类型
  8. if(NOT CMAKE_BUILD_TYPE)
  9. set(CMAKE_BUILD_TYPE Release)
  10. endif()
  11. # 查找Qt6组件
  12. find_package(Qt6 REQUIRED COMPONENTS
  13. Core
  14. Widgets
  15. Gui
  16. )
  17. # 启用Qt的MOC、UIC、RCC
  18. set(CMAKE_AUTOMOC ON)
  19. set(CMAKE_AUTOUIC ON)
  20. set(CMAKE_AUTORCC ON)
  21. # 源文件
  22. set(SOURCES
  23. main_simple.cpp
  24. screenwall_simple.cpp
  25. )
  26. # 头文件
  27. set(HEADERS
  28. screenwall_simple.h
  29. )
  30. # 创建可执行文件
  31. add_executable(SimpleScreenWall
  32. ${SOURCES}
  33. ${HEADERS}
  34. )
  35. # 链接Qt库
  36. target_link_libraries(SimpleScreenWall
  37. Qt6::Core
  38. Qt6::Widgets
  39. Qt6::Gui
  40. )
  41. # Windows特定设置
  42. if(WIN32)
  43. # 链接Windows API库
  44. target_link_libraries(SimpleScreenWall
  45. user32
  46. gdi32
  47. shell32
  48. psapi
  49. dwmapi
  50. ole32
  51. oleaut32
  52. )
  53. # 设置Windows子系统
  54. set_target_properties(SimpleScreenWall PROPERTIES
  55. WIN32_EXECUTABLE TRUE
  56. )
  57. # MSVC特定设置
  58. if(MSVC)
  59. # 设置编译选项
  60. target_compile_options(SimpleScreenWall PRIVATE
  61. /W3 # 警告级别3
  62. /MP # 多处理器编译
  63. /utf-8 # UTF-8编码
  64. )
  65. # 设置链接选项
  66. target_link_options(SimpleScreenWall PRIVATE
  67. /SUBSYSTEM:WINDOWS
  68. )
  69. # 设置运行时库
  70. set_property(TARGET SimpleScreenWall PROPERTY
  71. MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL"
  72. )
  73. endif()
  74. endif()
  75. # 设置输出目录
  76. set_target_properties(SimpleScreenWall PROPERTIES
  77. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
  78. RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/bin"
  79. RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/bin"
  80. )
  81. # 编译定义
  82. target_compile_definitions(SimpleScreenWall PRIVATE
  83. QT_DEPRECATED_WARNINGS
  84. QT_DISABLE_DEPRECATED_BEFORE=0x060000
  85. UNICODE
  86. _UNICODE
  87. WIN32_LEAN_AND_MEAN
  88. NOMINMAX
  89. )
  90. # 包含目录
  91. target_include_directories(SimpleScreenWall PRIVATE
  92. ${CMAKE_CURRENT_SOURCE_DIR}
  93. )
  94. # 安装规则
  95. install(TARGETS SimpleScreenWall
  96. RUNTIME DESTINATION bin
  97. )
  98. # Windows部署
  99. if(WIN32)
  100. # 查找windeployqt
  101. find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS ${Qt6_DIR}/../../../bin)
  102. if(WINDEPLOYQT_EXECUTABLE)
  103. # 添加部署命令
  104. add_custom_command(TARGET SimpleScreenWall POST_BUILD
  105. COMMAND ${WINDEPLOYQT_EXECUTABLE} $<TARGET_FILE:SimpleScreenWall>
  106. COMMENT "Deploying Qt libraries"
  107. )
  108. message(STATUS "Found windeployqt: ${WINDEPLOYQT_EXECUTABLE}")
  109. else()
  110. message(WARNING "windeployqt not found. Manual deployment may be required.")
  111. endif()
  112. endif()
  113. # 打印构建信息
  114. message(STATUS "")
  115. message(STATUS "========== SimpleScreenWall Build Configuration ==========")
  116. message(STATUS "Project: ${PROJECT_NAME} v${PROJECT_VERSION}")
  117. message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
  118. message(STATUS "C++ standard: ${CMAKE_CXX_STANDARD}")
  119. message(STATUS "Qt version: ${Qt6_VERSION}")
  120. message(STATUS "Compiler: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
  121. message(STATUS "Platform: ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION}")
  122. message(STATUS "Architecture: ${CMAKE_SYSTEM_PROCESSOR}")
  123. message(STATUS "Source directory: ${CMAKE_CURRENT_SOURCE_DIR}")
  124. message(STATUS "Binary directory: ${CMAKE_CURRENT_BINARY_DIR}")
  125. message(STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}")
  126. message(STATUS "=========================================================")
  127. message(STATUS "")
  128. # 构建后信息
  129. add_custom_target(build_info ALL
  130. COMMAND ${CMAKE_COMMAND} -E echo "SimpleScreenWall build completed successfully!"
  131. COMMAND ${CMAKE_COMMAND} -E echo "Executable: $<TARGET_FILE:SimpleScreenWall>"
  132. DEPENDS SimpleScreenWall
  133. )
  134. # 清理规则
  135. set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
  136. "${CMAKE_BINARY_DIR}/bin"
  137. )
  138. # CPack配置(可选)
  139. if(WIN32)
  140. set(CPACK_GENERATOR "NSIS;ZIP")
  141. set(CPACK_PACKAGE_NAME "SimpleScreenWall")
  142. set(CPACK_PACKAGE_VENDOR "SimpleScreenWall Team")
  143. set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "轻量级实时窗口预览系统")
  144. set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
  145. set(CPACK_PACKAGE_INSTALL_DIRECTORY "SimpleScreenWall")
  146. set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
  147. # NSIS特定设置
  148. set(CPACK_NSIS_DISPLAY_NAME "SimpleScreenWall")
  149. set(CPACK_NSIS_PACKAGE_NAME "SimpleScreenWall")
  150. set(CPACK_NSIS_CONTACT "support@simplescreenwall.com")
  151. set(CPACK_NSIS_HELP_LINK "https://github.com/simplescreenwall/simplescreenwall")
  152. include(CPack)
  153. endif()
  154. # 开发者选项
  155. option(BUILD_TESTS "Build unit tests" OFF)
  156. option(ENABLE_DEBUG_OUTPUT "Enable debug output" OFF)
  157. if(ENABLE_DEBUG_OUTPUT)
  158. target_compile_definitions(SimpleScreenWall PRIVATE DEBUG_OUTPUT)
  159. endif()
  160. if(BUILD_TESTS)
  161. enable_testing()
  162. # 这里可以添加测试相关的配置
  163. message(STATUS "Unit tests enabled")
  164. endif()
  165. # 性能分析选项
  166. option(ENABLE_PROFILING "Enable profiling" OFF)
  167. if(ENABLE_PROFILING AND MSVC)
  168. target_compile_options(SimpleScreenWall PRIVATE /PROFILE)
  169. target_link_options(SimpleScreenWall PRIVATE /PROFILE)
  170. endif()