cmake_minimum_required(VERSION 3.10) cmake_policy(SET CMP0074 NEW) project(unswsc LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) # Force-fPIC (For .so libraries) set(CMAKE_POSITION_INDEPENDENT_CODE ON) if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") add_compile_options(-Wno-literal-suffix) endif() if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) endif() find_package(OpenSSL REQUIRED) find_package(fmt CONFIG REQUIRED) find_package(jsoncpp CONFIG REQUIRED) find_package(unofficial-sodium CONFIG REQUIRED) # find_package(stduuid CONFIG REQUIRED) # find_package(ICU REQUIRED COMPONENTS i18n uc io tu data) add_library(webcc STATIC IMPORTED) set_target_properties(webcc PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/lib/libwebcc.a" INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/webcc" ) add_library(uohash SHARED IMPORTED) set_target_properties(uohash PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/so/libuohash.so" INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/uohash" ) add_library(utextcodec SHARED IMPORTED) set_target_properties(utextcodec PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/so/libutextcodec.so" INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/utextcodec" ) add_library(unswsc SHARED CORSConfig.cpp # 跨域访问配置 SessionManager.cpp # 会话管理器 WebFileInfo.cpp # 文件信息封装类 ServerProcessor.cpp # 原始业务处理类 CORSProcessor.cpp # 跨域访问处理器 UNSResponseBuilder.cpp # HTTP相应构造器 SyncFileReceiver.cpp # 同步文件上传 DateTime.cpp # 日期和时间 IPTable.cpp # IP表 IPList.cpp # IP列表 Global.cpp # 全局变量/函数 FileReceiver.cpp # 异步文件上传 #JsonUnicodeWriter.cpp # 关闭Unicode自动转义的Writer DataTransfer.cpp # 数据转移器 ServerLogger.cpp # 服务器日志类 LogArg.cpp # 服务器日志参数类型转换 ServerCore.cpp # 服务器内核 SafeRNG.cpp # 安全随机数生成器 HTTPObjects.cpp # webcc对象包装兼容层 PathTraversal.cpp # 路径穿越防御 TempFileManager.cpp # 临时文件管理器 ) # target_link_libraries(unswsc PRIVATE stduuid) target_link_libraries(unswsc PRIVATE webcc) target_link_libraries(unswsc PRIVATE uohash) target_link_libraries(unswsc PRIVATE utextcodec) target_link_libraries(unswsc PRIVATE fmt::fmt) target_link_libraries(unswsc PRIVATE OpenSSL::Crypto) target_link_libraries(unswsc PRIVATE JsonCpp::JsonCpp) target_link_libraries(unswsc PRIVATE unofficial-sodium::sodium) # target_link_libraries(unswsc PRIVATE ICU::i18n ICU::uc ICU::io ICU::tu ICU::data) add_executable(logger_test ServerLogger.cpp # 服务器日志类 LogArg.cpp # 服务器日志参数类型转换 TestLogger.cpp # 服务器日志测试 ) target_link_libraries(logger_test PRIVATE utextcodec) target_link_libraries(logger_test PRIVATE fmt::fmt) add_executable(core_distributor CoreDistributor.cpp ) target_link_libraries(core_distributor PRIVATE OpenSSL::Crypto) target_link_libraries(core_distributor PRIVATE JsonCpp::JsonCpp) if(NOT TARGET rebuild) add_custom_target(rebuild COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target clean COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --parallel 10 --config Release COMMENT ">>> Rebuilding entire project (clean + all) <<<" ) endif()