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) 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 ) # 运行期 .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" )