| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- # 设置兼容最低版本
- cmake_minimum_required(VERSION 3.20)
- # 定义项目名称变量
- set(PROJECT_NAME TEST001)
- project(${PROJECT_NAME} LANGUAGES CXX)
- # 设置C++标准
- set(CMAKE_CXX_STANDARD 17)
- set(CMAKE_CXX_STANDARD_REQUIRED ON)
- set(CMAKE_CXX_EXTENSIONS OFF)
- # 启用 Qt 的自动处理
- set(CMAKE_AUTOUIC ON)
- set(CMAKE_AUTOMOC ON)
- set(CMAKE_AUTORCC ON)
- # --- for vs2022
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/bin)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/bin)
- # --- protobuf for opencv
- set(Protobuf_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/share/protobuf")
- set(Protobuf_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/include")
- set(Protobuf_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/lib/libprotobuf.lib")
- # --- tiff for opencv
- set(TIFF_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/include")
- set(TIFF_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/lib/tiff.lib")
- # --- quirc for opencv
- set(quirc_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/share/quirc")
- # --- opencv
- set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/share/opencv4")
- find_package(OpenCV REQUIRED)
- # --- qt
- set(Qt6_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/qt6/vcpkg_installed/x64-windows/share/Qt6")
- # find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
- find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Multimedia MultimediaWidgets)
- # --- zeromq
- set(ZeroMQ_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zmq/vcpkg_installed/x64-windows/share/zeromq")
- set(ZeroMQ_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zmq/vcpkg_installed/x64-windows/include")
- set(ZeroMQ_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zmq/vcpkg_installed/x64-windows/lib/libzmq-mt-4_3_5.lib")
- find_package(ZeroMQ REQUIRED)
- # 设置源文件和头文件
- file(GLOB SOURCES src/*.cpp)
- file(GLOB HEADERS src/*.h)
- file(GLOB UIS src/*.ui)
- # 添加可执行文件
- add_executable(${PROJECT_NAME}
- ${SOURCES}
- ${HEADERS}
- ${UIS}
- )
- # 如果是 Windows 平台,则设置为 GUI 应用(无控制台)
- if(WIN32)
- set_target_properties(${PROJECT_NAME} PROPERTIES
- WIN32_EXECUTABLE ON
- OUTPUT_NAME "测试工具"
- )
- endif()
- # --- 包含头文件目录
- target_include_directories(${PROJECT_NAME} PRIVATE
- ${ZeroMQ_INCLUDE_DIRS}
- )
- # --- 链接
- target_link_libraries(${PROJECT_NAME} PRIVATE
- Qt6::Core
- Qt6::Gui
- Qt6::Widgets
- Qt6::Multimedia
- Qt6::MultimediaWidgets
- ${ZeroMQ_LIBRARIES}
- ${OpenCV_LIBS}
- ${Protobuf_LIBRARIES}
- ${TIFF_LIBRARY}
- ws2_32 # 添加 Winsock 库
- )
- # --- for qt 获取 Qt 插件目录路
- set(QT_CORE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/qt6/vcpkg_installed/x64-windows/bin/Qt6Core.dll")
- set(QT_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/qt6/vcpkg_installed")
- # --- 根据构建类型设置插件目录
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- set(CV_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/debug/bin")
- set(QT_BIN_DIR "${QT_BASE_DIR}/x64-windows/debug/bin")
- set(QT_PLUGINS_DIR "${QT_BASE_DIR}/x64-windows/debug/Qt6/plugins/platforms")
- set(QT_MULTIMEDIA_PLUGINS_DIR "${QT_BASE_DIR}/x64-windows/debug/Qt6/plugins/multimedia")
- else()
- set(CV_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opencv/vcpkg_installed/x64-windows/bin")
- set(QT_BIN_DIR "${QT_BASE_DIR}/x64-windows/bin")
- set(QT_PLUGINS_DIR "${QT_BASE_DIR}/x64-windows/Qt6/plugins/platforms")
- set(QT_MULTIMEDIA_PLUGINS_DIR "${QT_BASE_DIR}/x64-windows/Qt6/plugins/multimedia")
- endif()
- # --- 打包 qt
- file(GLOB QT_DLLS "${QT_BIN_DIR}/*.dll")
- file(GLOB QT_PLUGINS_DLLS "${QT_PLUGINS_DIR}/*.dll")
- file(GLOB QT_MULTIMEDIA_PLUGINS "${QT_MULTIMEDIA_PLUGINS_DIR}/*.dll")
- add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
- # 复制所有 DLL 文件到目标目录
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- ${QT_DLLS}
- "$<TARGET_FILE_DIR:${PROJECT_NAME}>/"
- # 创建 platforms 目录并复制文件
- COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:${PROJECT_NAME}>/platforms"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- ${QT_PLUGINS_DLLS}
- "$<TARGET_FILE_DIR:${PROJECT_NAME}>/platforms/"
- # 创建 multimedia 目录并复制文件
- COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:${PROJECT_NAME}>/multimedia"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- ${QT_MULTIMEDIA_PLUGINS}
- "$<TARGET_FILE_DIR:${PROJECT_NAME}>/multimedia/"
- )
- # --- 打包 opencv
- file(GLOB CV_DLLS "${CV_BIN_DIR}/*.dll")
- add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- ${CV_DLLS}
- "$<TARGET_FILE_DIR:${PROJECT_NAME}>/"
- )
- # --- 打包 zeromq
- add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zmq/vcpkg_installed/x64-windows/bin/libzmq-mt-4_3_5.dll"
- "$<TARGET_FILE_DIR:${PROJECT_NAME}>/"
- )
|