cmake_minimum_required(VERSION 4.0) set(QT_FORCE_CMP0156_TO_VALUE "NEW" CACHE STRING "" FORCE) project(device_ctrl) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC OFF) set(CMAKE_AUTORCC OFF) set(PACKAGE_DIRS ${CMAKE_SOURCE_DIR}/lib/HCNetSDK ${CMAKE_SOURCE_DIR}/lib/openssl C:/Qt/6.9.3/msvc2022_64 ) foreach (PACKAGE_DIR ${PACKAGE_DIRS}) list(APPEND CMAKE_PREFIX_PATH ${PACKAGE_DIR}) endforeach () add_compile_options("/utf-8" "/bigobj" "/std:c++20") find_package(HCNet CONFIG REQUIRED) find_package(spdlog CONFIG REQUIRED) find_package(openssl CONFIG REQUIRED) find_package(nlohmann_json CONFIG REQUIRED) find_package(protobuf CONFIG REQUIRED) find_package(TBB CONFIG REQUIRED) find_package(ICU REQUIRED COMPONENTS uc) find_package(mqtt_cpp_iface CONFIG REQUIRED) find_package(Qt6 REQUIRED COMPONENTS Core SerialPort Network) qt_add_executable(${PROJECT_NAME} main.cpp src/app/bean.cpp src/app/app.cpp src/common/spdlog/daily_and_size_sink.cpp src/common/spdlog/logging.cpp src/common/spdlog/color_format.cpp src/common/serial_port/serial_port.cpp src/common/snowflake/snowflake.cpp src/common/mitt/mitt.cpp src/common/utils/biz_lock.cpp src/cascade/cascade_client.cpp src/cascade/cascade_protocol.cpp src/sichen/sichen_scheduler.cpp src/mqtt/mqtt_msg.cpp src/mqtt/mqtt_cli.cpp src/mqtt/mqtt_svr.cpp src/http/http_svr.cpp src/wbs/loadometer/loadometer.cpp src/wbs/loadometer/loadometer_decoder.cpp src/wbs/loadometer/general_loadometer.cpp src/wbs/loadometer/general_loadometer_decoder.cpp src/wbs/vidicon/vidicon.cpp src/wbs/vidicon/hk_vidicon.cpp src/wbs/vidicon/gwytj_vidicon.cpp src/wbs/spkbox/spkbox.cpp src/wbs/spkbox/general_spkbox.cpp src/wbs/ytj/ytj.cpp src/wbs/ytj/ytj_barrier.cpp src/wbs/ytj/ytj_vidicon.cpp src/wbs/wbs.cpp src/wbs/device_group.cpp ) set(PROTOS_SRC src/app/app_config.proto src/mqtt/mqtt_config.proto src/http/http_config.proto src/wbs/wbs_config.proto src/wbs/loadometer/loadometer_config.proto src/wbs/vidicon/vidicon_config.proto src/wbs/spkbox/spkbox_config.proto src/wbs/ytj/ytj_config.proto ) set(PROTOS_INC src ) protobuf_generate( TARGET ${PROJECT_NAME} IMPORT_DIRS ${PROTOS_INC} PROTOS ${PROTOS_SRC} PROTOC_OUT_DIR ${CMAKE_BINARY_DIR}/proto ) target_compile_definitions(${PROJECT_NAME} PUBLIC NOMINMAX # 防止 windows 库与标准库中的 min、max 冲突 UNICODE # 启用 windows 的宽字符 API _WIN32_WINNT=0x0601 # 目标 windows 版本为 windows 7 QT_NO_KEYWORDS # 禁用 Qt 的关键字,防止与 C++ 关键字冲突 SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_DEBUG # 启用日志宏 CPPHTTPLIB_OPENSSL_SUPPORT # httplib 支持 openssl MQTT_STD_VARIANT # mqtt-cpp 使用 std::variant MQTT_STD_OPTIONAL # mqtt-cpp 使用 std::optional MQTT_STD_STRING_VIEW # mqtt-cpp 使用 std::string_view ) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src ${CMAKE_BINARY_DIR}/proto ) target_link_libraries(${PROJECT_NAME} PRIVATE ICU::uc spdlog::spdlog openssl::libssl openssl::libcrypto nlohmann_json::nlohmann_json protobuf::libprotobuf TBB::tbb TBB::tbbmalloc TBB::tbbmalloc_proxy HCNet::HCNetSDK HCNet::HCCore mqtt_cpp_iface::mqtt_cpp_iface Qt6::Core Qt6::SerialPort Qt6::Network ) find_program(WINDEPLOYQT_EXE NAMES windeployqt HINTS "${Qt6_DIR}/../../../bin") if (WINDEPLOYQT_EXE) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${WINDEPLOYQT_EXE} -openssl-root ${CMAKE_SOURCE_DIR}/lib/openssl --no-gui --no-qml --no-translations $ COMMENT "使用 windeployqt 复制依赖 DLL" ) else () message(WARNING "未找到 windeployqt,需要手动复制 DLL") endif ()