device-ctrl/CMakeLists.txt

125 lines
4.1 KiB
CMake
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 $<TARGET_FILE:${PROJECT_NAME}>
COMMENT "使用 windeployqt 复制依赖 DLL"
)
else ()
message(WARNING "未找到 windeployqt需要手动复制 DLL")
endif ()