# 设置兼容最低版本 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} "$/" # 创建 platforms 目录并复制文件 COMMAND ${CMAKE_COMMAND} -E make_directory "$/platforms" COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_PLUGINS_DLLS} "$/platforms/" # 创建 multimedia 目录并复制文件 COMMAND ${CMAKE_COMMAND} -E make_directory "$/multimedia" COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_MULTIMEDIA_PLUGINS} "$/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} "$/" ) # --- 打包 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" "$/" )