Files
wind_power_cal/backend/CMakeLists.txt
T
cloud 99ed321d24 功能: 服务端生成完整报告并保护单任务
- 使用 libxlsxwriter 常量内存导出 Excel\n- 增加全局任务占用提示与原始数据持久化\n- 保留运行时任务数据并更新接口文档
2026-08-05 16:47:31 +08:00

72 lines
2.4 KiB
CMake

cmake_minimum_required(VERSION 3.16.3)
project(wind_server VERSION 1.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 定位项目根目录(支持独立构建和作为子工程)
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
set(REPO_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/..")
else()
set(REPO_ROOT "${CMAKE_SOURCE_DIR}")
endif()
# ---- 架构检测 ----
if(NOT DEFINED TARGET_ARCH)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv7.*|arm)$")
set(TARGET_ARCH "arm32")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)$")
set(TARGET_ARCH "arm64")
else()
set(TARGET_ARCH "x64")
endif()
endif()
# ---- 本地 Drogon/Trantor (third_party 编译产物) ----
if(NOT DEFINED DROGON_LOCAL_PREFIX)
set(DROGON_LOCAL_PREFIX "${REPO_ROOT}/third_party/drogon/install/${TARGET_ARCH}")
endif()
if(EXISTS "${DROGON_LOCAL_PREFIX}/libs/cmake/Drogon/DrogonConfig.cmake")
list(PREPEND CMAKE_PREFIX_PATH "${DROGON_LOCAL_PREFIX}")
set(Drogon_DIR "${DROGON_LOCAL_PREFIX}/libs/cmake/Drogon" CACHE PATH "" FORCE)
set(Trantor_DIR "${DROGON_LOCAL_PREFIX}/libs/cmake/Trantor" CACHE PATH "" FORCE)
message(STATUS "Using local Drogon from ${DROGON_LOCAL_PREFIX}")
endif()
find_package(Drogon CONFIG REQUIRED)
find_package(Threads REQUIRED)
# libxlsxwriter 使用常量内存模式把大型工作簿逐行落盘,避免报告导出占满服务进程内存。
set(BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
add_subdirectory(${REPO_ROOT}/third_party/libxlsxwriter_repo
${CMAKE_CURRENT_BINARY_DIR}/libxlsxwriter)
file(GLOB_RECURSE SOURCES
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.h"
)
# 复制配置文件到 build 目录
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/config/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/config)
add_executable(wind_server ${SOURCES})
target_include_directories(wind_server PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${REPO_ROOT}/third_party
)
target_link_libraries(wind_server PRIVATE
Drogon::Drogon
Threads::Threads
xlsxwriter
)
# 运行期 .so 解析:RPATH 指向 Drogon install 的 libs 目录
set_target_properties(wind_server PROPERTIES
BUILD_RPATH "${DROGON_LOCAL_PREFIX}/libs"
INSTALL_RPATH "$ORIGIN/../lib;${DROGON_LOCAL_PREFIX}/libs"
)