From 46e329181c5a4970e87412279c58ca13c147175b Mon Sep 17 00:00:00 2001 From: LittleGuo Date: Sun, 25 Oct 2026 23:13:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20CODEBUDDY.md=EF=BC=9A?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=9E=84=E5=BB=BA/=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E7=BB=86=E8=8A=82=EF=BC=8C=E4=BF=AE=E6=AD=A3=20preset=20?= =?UTF-8?q?=E6=95=B0=E9=87=8F=EF=BC=8C=E6=96=B0=E5=A2=9E=20ZRX=20=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E6=B3=A8=E6=84=8F=E4=BA=8B=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CODEBUDDY.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/CODEBUDDY.md b/CODEBUDDY.md index a65f7a3..58a7210 100644 --- a/CODEBUDDY.md +++ b/CODEBUDDY.md @@ -37,14 +37,18 @@ cmake --build --preset R250 --config Release --target Build_SH_CORE # 聚合目 ``` - 要求 CMake ≥ 3.21;生成器 `Visual Studio 18 2026`,架构 `x64`,`/MP` 多进程编译。 +- Windows SDK 版本由 base preset 固定为 `WIN11_SDK=10.0.22621.0`,本机需安装该 SDK。 +- 构建树(binaryDir)位于 `cmake_output/code2026/`,已被 gitignore。 - preset 文件名是小写 `cmakepresets.json`(Windows 文件系统大小写不敏感,等价 `CMakePresets.json`)。 - 工具集随 CAD 版本变化:`v143`(R24x/R25x/R26x、Z202x)、`v142`、`v141`、`v140`、`v110`、`v100`、`v90`。 - C++ 标准在顶层 `cmakelists.txt` 中按 SDK 版本自动切换:ARX >25 → C++20;ARX 20~25 与 ZRX >2021 → C++14;ARX >19 → C++03;更老 → C++98。 - 输出目录:`bin/Code2026/{Debug|Release}-x64-<标签>`、`lib/Code2026/...`,标签为 `R<版本><子版本>` 或 `Z<版本>`。 +- MFC 以动态 DLL 方式链接(`_AFXDLL` + `MultiThreadedDLL` 运行时),所有 ARX 模块经 `apply_arx_definitions` 统一注入。 +- 全局编译项:`UNICODE/_UNICODE`、`_CRT_SECURE_NO_WARNINGS`、`/wd4819 /wd4996`、`/Zc:forScope-`。Debug 会剥掉 `_DEBUG`/`RTC*` 并强制 `/Od /Zi /Ob0`;Release 为 `/O2`(定义 `WholeProgramOptimization` 时追加 `/GL` + `/LTCG`)。 - 加密模块的产物再落到子目录 `-`(如 `ENV_2025_V6_S0-BAL_REMOTE`)。 - Debug 构建通过 post-build 调用 `copyarx.exe`,按 `sh_output_path.json`(ACAD)/ `zw_output_path.json`(中望)把产物部署到 `c:\ShangHuaSoft\Envi3D-2026-M`。**Release 不部署**。 -### 预设(`cmakepresets.json`,13 套 + 3 个 base) +### 预设(`cmakepresets.json`,14 套版本 preset + 3 个隐藏 base) | 分组 | preset | | --- | --- | @@ -67,7 +71,7 @@ cmake --build --preset R250 --config Release --target Build_SH_CORE # 聚合目 ### CMake 封装(`cmake/functions.cmake`) - `add_custom_module(dir folder)`:`add_subdirectory` + 以目录名作为 target 名并设 FOLDER;`add_custom_module_2(dir target folder)` 用于目录名 ≠ target 名(如 `ISODraft` → `ISODraftCmd`、`tg_shs/shs_kernal` → `wfK`)。 -- `target_link_objectarx(target EXT)`:链接 CAD SDK + 全局头 `ShsGlobalIncludes`(`inc/`、`inc/implement/`),定义 `CMAKE`、`ARX=<版本>` 与模块导出宏(如 `HVACCMD_EXPORT`)。 +- `target_link_objectarx(target EXT)`:链接 CAD SDK + 全局头 `ShsGlobalIncludes`(`inc/`、`inc/implement/`),定义 `CMAKE`、`ARX=<版本>` 与模块导出宏(如 `HVACCMD_EXPORT`);另加 `DEP_INC_ROOT` 到头文件搜索路径并链接 `rpcrt4.lib`。 - `simple_link_cad_sdk`:按 `IsZWCAD()` 选择 `ThirdParty::ARX` / `ThirdParty::ZRX`。 - `add_def_file_name(SOURCES )`:向源列表追加 `.def` / `_zrx.def`(导出 `acrxEntryPoint`、`acrxGetApiVersion`)。 - `target_set_name_and_suffix(target ".arx")`:设置 `OUTPUT_NAME`/`SUFFIX`,中望平台自动改 `.zrx`。 @@ -108,10 +112,10 @@ cmake --build --preset R250 --config Release --target Build_SH_CORE # 聚合目 - **CoreLibrary**:数据模型核心(自定义实体 `AecDbXxx`),头文件在 `inc/` 与 `inc/implement/`,被所有模块共享。 - **AecRxBase**:ARX 基类库(`AecDbEntityBase`、`AecDbCurveBase`、Grip、双击编辑等)。 -- **CoreCommand**:主命令集 + MFC 主界面/面板(BIM 面板、AI 助手 `sh_ai.cpp` / `askaipaletteset.cpp`)、PCF 导入导出(`pcf.cpp`、`PcfIso.cpp`);**生成两种加密版本**。 +- **CoreCommand**:主命令集 + MFC 主界面/面板(BIM 面板、AI 助手 `sh_ai.cpp` / `askaipaletteset.cpp`)、PCF 导入导出(`pcf.cpp`、`PcfIso.cpp`);**生成两种加密版本**。链接 `ThirdParty::modernGlue`,非 ZWCAD 平台还链接 `AsdkHlrApi.lib`(AutoCAD HLR API,改消隐/剖面相关代码时会用到)。 - **CoreImplement**:仅在 Debug 下链接(自定义实体的实现层)。 - **StartApp**:C# (.NET WinForms) 启动器,不走 CMake,保留独立 `StartApp.sln`。 -- **tg_shs/**:天正系列(`shs_kernal`→`wfK`、`shs_twtkernal`→`wfKernal`、`shs_GeLib`、`shs_annotate`→`wfA`、`shs_twtanotate`→`wfAnotate`、`shs_blklib`→`wfB`、`shs_siteplan`→`wfS`、`shs_pipewire`→`wfpipew`、`shs_outdoor`→`wfoutdoor`、`shs_ximage/*` 图像库、`shs_dbf`、`shs_sqlite` 等)。 +- **tg_shs/**:天正系列(`shs_kernal`→`wfK`、`shs_twtkernal`→`wfKernal`、`shs_GeLib`、`shs_subgeLib`、`shs_annotate`→`wfA`、`shs_twtanotate`→`wfAnotate`、`shs_blklib`→`wfB`、`shs_siteplan`→`wfS`、`shs_pipewire`→`wfpipew`、`shs_outdoor`→`wfoutdoor`、`shs_dbf`、`shs_sqlite` 等);`shs_ximage/` 下是第三方图像库源码(zlib/tiff/png/RAW/mng/Jpeg/jbig/jasper/ximage,FOLDER `TG/Global_Libraries/image`)。 ## 新增模块约定 @@ -132,6 +136,7 @@ set_debug_post_build( "" ".arx") - 用 `IsZWCAD()` 判断目标平台;ZRX 产物后缀自动变 `.zrx`,链接 `ThirdParty::ZRX`;ARX 链接 `ThirdParty::ARX`。 - 编译宏:`ARX=<版本号>` 或 `ZWCAD`;模块导出宏(`*_EXPORT`)由 `target_link_objectarx` 注入。 +- **注意**:ZRX 平台的 `ARX` 宏取 `CAD_SDK_VERSION` 末两位(ZWCAD 2026 → `ARX=26`),与 AutoCAD R 版本号数值重叠;区分平台必须用 `#ifdef ZWCAD`,不要只靠 `ARX` 版本比较。 - 部分库仅在特定 SDK 版本可用(如 `acdrawbridge` 需 >19,`acpal`/`acgeoment` 需 >23),已在 `ThirdPartyDeps.cmake` 处理。 - **禁止**新增或依赖 `.vcxproj` / `.sln`(`StartApp` 除外)。`cmake_output/` 下 CMake 生成的临时 `*.vcxproj` 是构建产物、已被 gitignore,**不要**误提交。 - `.gitignore` 忽略:`Arx/`、`ZRX/`、`cmake_output/`、`bin/`、`lib/`,以及 `*.obj/*.pdb/*.user/.vs/` 等 VS 中间产物。