From 0b88b1a7f4e9a06c206765bf91d9818092fecd0d Mon Sep 17 00:00:00 2001 From: tzdwindows 7 <3076584115@qq.com> Date: Sat, 15 Nov 2025 11:21:06 +0800 Subject: [PATCH] build(Vivid2DRenderer): enhance post-build script with directory exclusion logic - Add DesignTime build protection by checking $(TargetName) macro - Implement exclusion list for directories to skip during copy operations - Recursively copy header files from subdirectories while excluding specified dirs - Introduce cleanup step to remove excluded directories from target path - Improve robustness of file copy and directory management in build process - Add logging for directory copy and cleanup actions for better traceability --- Vivid2DRenderer/Vivid2DRenderer.vcxproj | 51 +++++++++++++++++++++---- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/Vivid2DRenderer/Vivid2DRenderer.vcxproj b/Vivid2DRenderer/Vivid2DRenderer.vcxproj index 21c648d..5adb64d 100644 --- a/Vivid2DRenderer/Vivid2DRenderer.vcxproj +++ b/Vivid2DRenderer/Vivid2DRenderer.vcxproj @@ -143,22 +143,47 @@ setlocal enabledelayedexpansion +REM --- DesignTime 保护 --- +REM 检查 $(TargetName) 宏,如果在 DesignTime 环境中可能为空,则退出。 +if "$(TargetName)"=="" ( + echo 警告:检测到可能为 DesignTime 构建,跳过后期生成事件。 + goto :EOF +) + REM 定义目标路径变量,使用 VS 宏 $(TargetDir) -REM $(TargetDir) 通常解析为 C:\...\Vivid2DRenderer\x64\Release\ set TARGET_INCLUDE_DIR=$(TargetDir)include +set PROJECT_DIR=$(ProjectDir) +REM 定义需要排除的目录名列表 +set EXCLUDE_DIRS_LIST=.idea !DEST_DIR! x64 REM 确保目标目录存在 -mkdir %TARGET_INCLUDE_DIR% +mkdir "%TARGET_INCLUDE_DIR%" REM --- 复制操作 --- REM 1. 复制项目根目录下的 .h 文件 -REM $(ProjectDir) 解析为 C:\...\Vivid2DRenderer\Vivid2DRenderer\ -xcopy "$(ProjectDir)*.h" "%TARGET_INCLUDE_DIR%" /Y /I +xcopy "%PROJECT_DIR%*.h" "%TARGET_INCLUDE_DIR%" /Y /I -REM 2. 递归复制 'systems\' 文件夹下的所有 .h 文件 -REM /E 确保复制子目录结构 -xcopy "$(ProjectDir)systems\*.h" "%TARGET_INCLUDE_DIR%\systems" /E /Y /I +REM 2. 遍历并复制子目录中的 .h 文件,跳过 EXCLUDE_DIRS_LIST 中的目录 +REM /D 仅遍历目录 +for /D %%d in ("%PROJECT_DIR%*") do ( + set DIR_NAME=%%~nxd + + REM 检查当前目录名是否在排除列表中 + set IS_EXCLUDED=0 + for %%e in (%EXCLUDE_DIRS_LIST%) do ( + if /I "%%e"=="!DIR_NAME!" ( + set IS_EXCLUDED=1 + ) + ) + + REM 如果不在排除列表中,则递归复制该目录下的所有 .h 文件 + if !IS_EXCLUDED!==0 ( + echo 正在复制目录: %%~nxd + REM /E 确保复制子目录结构,/I 确保目标是目录,避免复制文件失败 + xcopy "%%d\*.h" "%TARGET_INCLUDE_DIR%\%%~nxd" /E /Y /I + ) +) REM --- 排除操作 --- @@ -167,7 +192,17 @@ for /R "%TARGET_INCLUDE_DIR%" %%f in (framework.h pch.h) do ( del /Q "%%f" ) -endlocal +REM 4. 清理排除目录 +REM 强制删除目标路径中不应存在的文件夹 +for %%e in (%EXCLUDE_DIRS_LIST%) do ( + echo 正在清理排除目录: %TARGET_INCLUDE_DIR%\%%e + REM /S 删除所有子目录和文件, /Q 安静模式, /F 强制删除只读文件 + rd /S /Q "%TARGET_INCLUDE_DIR%\%%e" 2>nul +) + +endlocal + +:EOF ==== Package include ====