mirror of
https://github.com/zhenyan121/SporeBG-Conid.git
synced 2026-04-10 06:14:08 +08:00
feat: add CMake support for Linux
This commit is contained in:
117
CMakeLists.txt
117
CMakeLists.txt
@@ -5,19 +5,19 @@ project(SporeBG-Conid LANGUAGES C CXX)
|
|||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
# 输出目录
|
# 输出目录 - 修复配置问题
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$<CONFIGURATION>")
|
if(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
|
||||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$<CONFIGURATION>")
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$<CONFIGURATION>")
|
||||||
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$<CONFIGURATION>")
|
||||||
|
else()
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
|
||||||
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
include(${CMAKE_SOURCE_DIR}/cmake/ThirdParty.cmake)
|
include(${CMAKE_SOURCE_DIR}/cmake/ThirdParty.cmake)
|
||||||
include(${CMAKE_SOURCE_DIR}/cmake/SDL.cmake)
|
include(${CMAKE_SOURCE_DIR}/cmake/SDL.cmake)
|
||||||
|
|
||||||
# ========== 源码 ==========
|
# ========== 源码 ==========
|
||||||
#file(GLOB_RECURSE SOURCE_FILES
|
|
||||||
# src/*.cpp
|
|
||||||
# src/*.h
|
|
||||||
#)
|
|
||||||
|
|
||||||
set(SOURCE_FILES
|
set(SOURCE_FILES
|
||||||
src/main.cpp
|
src/main.cpp
|
||||||
src/core/GameApplication.cpp
|
src/core/GameApplication.cpp
|
||||||
@@ -54,64 +54,37 @@ set(SOURCE_FILES
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
|
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
|
||||||
|
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE
|
target_include_directories(${PROJECT_NAME} PRIVATE
|
||||||
${CMAKE_SOURCE_DIR}/src
|
${CMAKE_SOURCE_DIR}/src
|
||||||
${asio_SOURCE_DIR}/asio/include
|
${asio_SOURCE_DIR}/asio/include
|
||||||
|
)
|
||||||
|
|
||||||
|
# ========== 平台特定设置 ==========
|
||||||
|
if (WIN32)
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
||||||
|
ASIO_STANDALONE
|
||||||
|
_WIN32_WINNT=0x0A00
|
||||||
|
)
|
||||||
|
|
||||||
)
|
target_link_libraries(${PROJECT_NAME}
|
||||||
# ========== Windows: 定义宏 & 链接库 ==========
|
PRIVATE
|
||||||
if (WIN32)
|
SDL3::SDL3
|
||||||
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
SDL3_ttf::SDL3_ttf
|
||||||
ASIO_STANDALONE
|
SDL3_image::SDL3_image
|
||||||
_WIN32_WINNT=0x0A00
|
nlohmann_json::nlohmann_json
|
||||||
)
|
ws2_32
|
||||||
|
mswsock
|
||||||
target_link_libraries(${PROJECT_NAME}
|
advapi32
|
||||||
PRIVATE
|
)
|
||||||
SDL3::SDL3
|
|
||||||
SDL3_ttf::SDL3_ttf
|
# Windows: DLL 复制逻辑
|
||||||
SDL3_image::SDL3_image
|
|
||||||
nlohmann_json::nlohmann_json
|
|
||||||
ws2_32
|
|
||||||
mswsock
|
|
||||||
advapi32
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
# ========== Windows: 复制 DLL ==========
|
|
||||||
if (WIN32)
|
|
||||||
# 查找 MinGW 运行时库
|
|
||||||
if(MINGW)
|
if(MINGW)
|
||||||
# 查找 libgcc DLL
|
# ... (保持 MinGW DLL 复制逻辑)
|
||||||
execute_process(
|
|
||||||
COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=libgcc_s_seh-1.dll
|
|
||||||
OUTPUT_VARIABLE GCC_DLL_PATH
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
# 查找 libstdc++ DLL
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=libstdc++-6.dll
|
|
||||||
OUTPUT_VARIABLE STDCPP_DLL_PATH
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
# 复制编译器运行时库
|
|
||||||
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
||||||
${GCC_DLL_PATH}
|
|
||||||
$<TARGET_FILE_DIR:${PROJECT_NAME}>
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
||||||
${STDCPP_DLL_PATH}
|
|
||||||
$<TARGET_FILE_DIR:${PROJECT_NAME}>
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
||||||
$<TARGET_FILE:SDL3_image::SDL3_image>
|
|
||||||
$<TARGET_FILE_DIR:${PROJECT_NAME}>
|
|
||||||
COMMENT "Copying MinGW runtime DLLs"
|
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
$<TARGET_FILE:SDL3::SDL3>
|
$<TARGET_FILE:SDL3::SDL3>
|
||||||
@@ -121,11 +94,28 @@ if (WIN32)
|
|||||||
$<TARGET_FILE_DIR:${PROJECT_NAME}>
|
$<TARGET_FILE_DIR:${PROJECT_NAME}>
|
||||||
COMMENT "Copying SDL3 runtime DLLs"
|
COMMENT "Copying SDL3 runtime DLLs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
else() # Linux/macOS 等 Unix-like 系统
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
||||||
|
ASIO_STANDALONE
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PRIVATE
|
||||||
|
SDL3::SDL3
|
||||||
|
SDL3_ttf::SDL3_ttf
|
||||||
|
SDL3_image::SDL3_image
|
||||||
|
nlohmann_json::nlohmann_json
|
||||||
|
pthread # Linux 需要 pthread
|
||||||
|
${CMAKE_DL_LIBS} # 动态链接库
|
||||||
|
)
|
||||||
|
|
||||||
|
# 可选:添加额外的 Linux 特定链接库
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ========== 跨平台资产复制 ==========
|
||||||
|
|
||||||
|
|
||||||
# ========== 仅复制修改过的 assets ==========
|
|
||||||
set(ASSETS_SRC_DIR "${CMAKE_SOURCE_DIR}/assets")
|
set(ASSETS_SRC_DIR "${CMAKE_SOURCE_DIR}/assets")
|
||||||
set(ASSETS_DST_DIR "$<TARGET_FILE_DIR:${PROJECT_NAME}>/assets")
|
set(ASSETS_DST_DIR "$<TARGET_FILE_DIR:${PROJECT_NAME}>/assets")
|
||||||
|
|
||||||
@@ -139,7 +129,7 @@ foreach(ASSET_FILE ${ASSET_FILES})
|
|||||||
# 计算目标路径
|
# 计算目标路径
|
||||||
file(RELATIVE_PATH REL_PATH "${ASSETS_SRC_DIR}" "${ASSET_FILE}")
|
file(RELATIVE_PATH REL_PATH "${ASSETS_SRC_DIR}" "${ASSET_FILE}")
|
||||||
set(OUT_FILE "${ASSETS_DST_DIR}/${REL_PATH}")
|
set(OUT_FILE "${ASSETS_DST_DIR}/${REL_PATH}")
|
||||||
|
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
TARGET ${PROJECT_NAME} POST_BUILD
|
TARGET ${PROJECT_NAME} POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory
|
COMMAND ${CMAKE_COMMAND} -E make_directory
|
||||||
@@ -149,4 +139,3 @@ foreach(ASSET_FILE ${ASSET_FILES})
|
|||||||
COMMENT "Copying changed asset: ${REL_PATH}"
|
COMMENT "Copying changed asset: ${REL_PATH}"
|
||||||
)
|
)
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
|
||||||
Reference in New Issue
Block a user