From 9fc0a73c7c50a8b56da1f45ac308e142c5aea600 Mon Sep 17 00:00:00 2001 From: Toukaiteio Date: Fri, 28 Nov 2025 09:22:59 +0800 Subject: [PATCH] =?UTF-8?q?build(CMake):=20=E6=B7=BB=E5=8A=A0nanoid?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=B9=B6=E6=94=B9=E8=BF=9BSteam=20API?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加nanoid_cpp头文件路径到CMake配置 重构Steam API链接逻辑以支持多平台 添加steam_id.txt生成命令 调整编码添加了BOM头 --- CMakeLists.txt | 121 +++++++++++++++++++++++++++++++++++++++---- online_game_tool.cpp | 2 +- 2 files changed, 111 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 875769f..8f19aca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,7 @@ find_package(Boost REQUIRED) include_directories(${CMAKE_SOURCE_DIR}) include_directories(${CMAKE_SOURCE_DIR}/imgui) include_directories(${CMAKE_SOURCE_DIR}/imgui/backends) +include_directories(${CMAKE_SOURCE_DIR}/nanoid_cpp/inc) include_directories(${CMAKE_SOURCE_DIR}/steamworks/public) include_directories(${CMAKE_SOURCE_DIR}/steamworks/public/steam) include_directories(${CMAKE_SOURCE_DIR}/net) @@ -25,22 +26,120 @@ file(GLOB SOURCES "imgui/backends/imgui_impl_opengl3.cpp" "net/*.cpp" "steam/*.cpp" + "nanoid_cpp/src/nanoid/*.cpp" ) # Create executable add_executable(ConnectTool ${SOURCES}) -# Link libraries -target_link_libraries(ConnectTool - glfw - OpenGL::GL - Boost::headers - ${CMAKE_SOURCE_DIR}/steamworks/redistributable_bin/osx/libsteam_api.dylib -) +# Determine Steamworks directory location with fallback +set(STEAMWORKS_DIR "${CMAKE_SOURCE_DIR}/steamworks") +set(STEAMWORKS_SDK_DIR "${CMAKE_SOURCE_DIR}/sdk") -# Copy libsteam_api.dylib to output directory for runtime +# Function to find Steam API library with fallback +function(find_steam_api OUTPUT_VAR PLATFORM_PATH) + set(STEAM_API_PATH "${STEAMWORKS_DIR}/redistributable_bin/${PLATFORM_PATH}") + set(STEAM_API_SDK_PATH "${STEAMWORKS_SDK_DIR}/redistributable_bin/${PLATFORM_PATH}") + + if(EXISTS "${STEAM_API_PATH}") + set(${OUTPUT_VAR} "${STEAM_API_PATH}" PARENT_SCOPE) + elseif(EXISTS "${STEAM_API_SDK_PATH}") + set(${OUTPUT_VAR} "${STEAM_API_SDK_PATH}" PARENT_SCOPE) + message(STATUS "Using Steam API from sdk directory: ${STEAM_API_SDK_PATH}") + else() + set(${OUTPUT_VAR} "${STEAM_API_PATH}" PARENT_SCOPE) + message(WARNING "Steam API library not found at: ${STEAM_API_PATH} or ${STEAM_API_SDK_PATH}") + endif() +endfunction() + +# Platform-specific Steam API linking +if(WIN32) + # Windows 64-bit + find_steam_api(STEAM_API_LIB "win64/steam_api64.dll") + target_link_libraries(ConnectTool + glfw + OpenGL::GL + Boost::headers + ${STEAM_API_LIB} + ) + + # Copy steam_api64.dll to output directory for runtime + add_custom_command(TARGET ConnectTool POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${STEAM_API_LIB} + $/steam_api64.dll + ) +elseif(UNIX AND NOT APPLE) + # Linux platforms + if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "amd64") + # x86_64 Linux + find_steam_api(STEAM_API_LIB "linux64/libsteam_api.so") + target_link_libraries(ConnectTool + glfw + OpenGL::GL + Boost::headers + ${STEAM_API_LIB} + ) + + add_custom_command(TARGET ConnectTool POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${STEAM_API_LIB} + $/libsteam_api.so + ) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686") + # x86 32-bit Linux + find_steam_api(STEAM_API_LIB "linux32/libsteam_api.so") + target_link_libraries(ConnectTool + glfw + OpenGL::GL + Boost::headers + ${STEAM_API_LIB} + ) + + add_custom_command(TARGET ConnectTool POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${STEAM_API_LIB} + $/libsteam_api.so + ) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm64") + # ARM64 Linux + find_steam_api(STEAM_API_LIB "linuxarm64/libsteam_api.so") + target_link_libraries(ConnectTool + glfw + OpenGL::GL + Boost::headers + ${STEAM_API_LIB} + ) + + add_custom_command(TARGET ConnectTool POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${STEAM_API_LIB} + $/libsteam_api.so + ) + else() + message(WARNING "Unsupported Linux architecture: ${CMAKE_SYSTEM_PROCESSOR}") + endif() +elseif(APPLE) + # macOS + find_steam_api(STEAM_API_LIB "osx/libsteam_api.dylib") + target_link_libraries(ConnectTool + glfw + OpenGL::GL + Boost::headers + ${STEAM_API_LIB} + ) + + # Copy libsteam_api.dylib to output directory for runtime + add_custom_command(TARGET ConnectTool POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${STEAM_API_LIB} + $/libsteam_api.dylib + ) +else() + message(WARNING "Unsupported platform") +endif() + +# Create steam_id.txt file with content 480 add_custom_command(TARGET ConnectTool POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_SOURCE_DIR}/steamworks/redistributable_bin/osx/libsteam_api.dylib - $/libsteam_api.dylib + COMMAND ${CMAKE_COMMAND} -E echo "480" > $/steam_id.txt ) diff --git a/online_game_tool.cpp b/online_game_tool.cpp index e956133..8717946 100644 --- a/online_game_tool.cpp +++ b/online_game_tool.cpp @@ -1,4 +1,4 @@ -#include "steam/steam_networking_manager.h" +#include "steam/steam_networking_manager.h" #include "steam/steam_room_manager.h" #include "steam/steam_utils.h" #include "tcp_server.h"