CMakeLists.txt 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. # 设置兼容最低版本
  2. cmake_minimum_required(VERSION 3.20)
  3. # 定义项目名称变量
  4. set(PROJECT_NAME TEST001)
  5. project(${PROJECT_NAME} LANGUAGES CXX)
  6. # 设置C++标准
  7. set(CMAKE_CXX_STANDARD 17)
  8. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  9. set(CMAKE_CXX_EXTENSIONS OFF)
  10. # 启用 Qt 的自动处理
  11. set(CMAKE_AUTOUIC ON)
  12. set(CMAKE_AUTOMOC ON)
  13. set(CMAKE_AUTORCC ON)
  14. # --- for vs2022
  15. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/bin)
  16. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/bin)
  17. # --- protobuf for opencv
  18. set(Protobuf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/share/protobuf")
  19. set(Protobuf_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/include")
  20. set(Protobuf_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/lib/libprotobuf.lib")
  21. # --- tiff for opencv
  22. set(TIFF_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/include")
  23. set(TIFF_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/lib/tiff.lib")
  24. # --- quirc for opencv
  25. set(quirc_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/share/quirc")
  26. # --- opencv
  27. set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/share/opencv4")
  28. find_package(OpenCV REQUIRED)
  29. # --- qt
  30. set(Qt6_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/qt6/vcpkg_installed/x64-windows/share/Qt6")
  31. # find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
  32. find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Multimedia MultimediaWidgets)
  33. # --- zeromq
  34. set(ZeroMQ_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zmq/vcpkg_installed/x64-windows/share/zeromq")
  35. set(ZeroMQ_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zmq/vcpkg_installed/x64-windows/include")
  36. set(ZeroMQ_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zmq/vcpkg_installed/x64-windows/lib/libzmq-mt-4_3_5.lib")
  37. find_package(ZeroMQ REQUIRED)
  38. # 设置源文件和头文件
  39. file(GLOB SOURCES src/*.cpp)
  40. file(GLOB HEADERS src/*.h)
  41. file(GLOB UIS src/*.ui)
  42. # 添加可执行文件
  43. add_executable(${PROJECT_NAME}
  44. ${SOURCES}
  45. ${HEADERS}
  46. ${UIS}
  47. )
  48. # 如果是 Windows 平台,则设置为 GUI 应用(无控制台)
  49. if(WIN32)
  50. set_target_properties(${PROJECT_NAME} PROPERTIES
  51. WIN32_EXECUTABLE ON
  52. OUTPUT_NAME "测试工具"
  53. )
  54. endif()
  55. # --- 包含头文件目录
  56. target_include_directories(${PROJECT_NAME} PRIVATE
  57. ${ZeroMQ_INCLUDE_DIRS}
  58. )
  59. # --- 链接
  60. target_link_libraries(${PROJECT_NAME} PRIVATE
  61. Qt6::Core
  62. Qt6::Gui
  63. Qt6::Widgets
  64. Qt6::Multimedia
  65. Qt6::MultimediaWidgets
  66. ${ZeroMQ_LIBRARIES}
  67. ${OpenCV_LIBS}
  68. ${Protobuf_LIBRARIES}
  69. ${TIFF_LIBRARY}
  70. ws2_32 # 添加 Winsock 库
  71. )
  72. # --- for qt 获取 Qt 插件目录路
  73. set(QT_CORE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/qt6/vcpkg_installed/x64-windows/bin/Qt6Core.dll")
  74. set(QT_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/qt6/vcpkg_installed")
  75. # --- 根据构建类型设置插件目录
  76. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  77. set(CV_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/debug/bin")
  78. set(QT_BIN_DIR "${QT_BASE_DIR}/x64-windows/debug/bin")
  79. set(QT_PLUGINS_DIR "${QT_BASE_DIR}/x64-windows/debug/Qt6/plugins/platforms")
  80. set(QT_MULTIMEDIA_PLUGINS_DIR "${QT_BASE_DIR}/x64-windows/debug/Qt6/plugins/multimedia")
  81. else()
  82. set(CV_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/bin")
  83. set(QT_BIN_DIR "${QT_BASE_DIR}/x64-windows/bin")
  84. set(QT_PLUGINS_DIR "${QT_BASE_DIR}/x64-windows/Qt6/plugins/platforms")
  85. set(QT_MULTIMEDIA_PLUGINS_DIR "${QT_BASE_DIR}/x64-windows/Qt6/plugins/multimedia")
  86. endif()
  87. # --- 打包 qt
  88. file(GLOB QT_DLLS "${QT_BIN_DIR}/*.dll")
  89. file(GLOB QT_PLUGINS_DLLS "${QT_PLUGINS_DIR}/*.dll")
  90. file(GLOB QT_MULTIMEDIA_PLUGINS "${QT_MULTIMEDIA_PLUGINS_DIR}/*.dll")
  91. add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
  92. # 复制所有 DLL 文件到目标目录
  93. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  94. ${QT_DLLS}
  95. "$<TARGET_FILE_DIR:${PROJECT_NAME}>/"
  96. # 创建 platforms 目录并复制文件
  97. COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:${PROJECT_NAME}>/platforms"
  98. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  99. ${QT_PLUGINS_DLLS}
  100. "$<TARGET_FILE_DIR:${PROJECT_NAME}>/platforms/"
  101. # 创建 multimedia 目录并复制文件
  102. COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:${PROJECT_NAME}>/multimedia"
  103. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  104. ${QT_MULTIMEDIA_PLUGINS}
  105. "$<TARGET_FILE_DIR:${PROJECT_NAME}>/multimedia/"
  106. )
  107. # --- 打包 opencv
  108. file(GLOB CV_DLLS "${CV_BIN_DIR}/*.dll")
  109. add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
  110. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  111. ${CV_DLLS}
  112. "$<TARGET_FILE_DIR:${PROJECT_NAME}>/"
  113. )
  114. # --- 打包 zeromq
  115. add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
  116. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  117. "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zmq/vcpkg_installed/x64-windows/bin/libzmq-mt-4_3_5.dll"
  118. "$<TARGET_FILE_DIR:${PROJECT_NAME}>/"
  119. )