125 lines
4.1 KiB
CMake
125 lines
4.1 KiB
CMake
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 () |