Files
SunnyLand/cmake/scripts/CopyAssets.cmake
T
2025-10-10 07:54:19 +08:00

50 lines
1.6 KiB
CMake

# ============================================
# 资源文件复制脚本
# ============================================
# 此脚本在构建时执行,用于复制资源文件到可执行文件目录
# 使用方式:cmake -DSOURCE_DIR=... -DTARGET_DIR=... -P CopyAssets.cmake
# 检查必需参数
if(NOT DEFINED SOURCE_DIR OR NOT DEFINED TARGET_DIR)
message(FATAL_ERROR "Required parameters: SOURCE_DIR and TARGET_DIR")
endif()
# 计算源文件夹大小
file(GLOB_RECURSE SOURCE_FILES "${SOURCE_DIR}/*")
set(SOURCE_SIZE 0)
foreach(FILE IN LISTS SOURCE_FILES)
if(EXISTS "${FILE}")
file(SIZE "${FILE}" FILE_SIZE)
math(EXPR SOURCE_SIZE "${SOURCE_SIZE} + ${FILE_SIZE}")
endif()
endforeach()
# 计算目标文件夹大小
set(TARGET_SIZE 0)
if(EXISTS "${TARGET_DIR}")
file(GLOB_RECURSE TARGET_FILES "${TARGET_DIR}/*")
foreach(FILE IN LISTS TARGET_FILES)
if(EXISTS "${FILE}")
file(SIZE "${FILE}" FILE_SIZE)
math(EXPR TARGET_SIZE "${TARGET_SIZE} + ${FILE_SIZE}")
endif()
endforeach()
endif()
# 比较大小,只在不同时复制
if(NOT SOURCE_SIZE EQUAL TARGET_SIZE)
file(COPY "${SOURCE_DIR}/" DESTINATION "${TARGET_DIR}")
message(STATUS "Update assets folder (size: ${SOURCE_SIZE} bytes)")
else()
# message(STATUS "资源文件已是最新,跳过复制")
endif()
# 复制 imgui.ini(如果指定且存在)
if(DEFINED IMGUI_INI_SOURCE AND EXISTS "${IMGUI_INI_SOURCE}")
if(NOT EXISTS "${TARGET_DIR}/imgui.ini")
file(COPY "${IMGUI_INI_SOURCE}" DESTINATION "${TARGET_DIR}")
message(STATUS "Copy imgui.ini to executable directory")
endif()
endif()