Merge pull request '更新 CODEBUDDY.md:补充构建/链接细节,修正 preset 数量,新增 ZRX 平台注意事项' (#72) from home-lenovo-legion-r9000/doc-codebuddy-md-update into main

Reviewed-on: #72
Reviewed-by: gjm <littleoldpan@163.com>
This commit was merged in pull request #72.
This commit is contained in:
gjm committed 2026-10-25 23:14:03 +08:00
commit d1bdf281cc
1 file changed
+9 -4
+9 -4
View File
@@ -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/<preset>`,已被 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`)。
- 加密模块的产物再落到子目录 `<PRODUCT>-<MODE>`(如 `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 <Name>)`:向源列表追加 `<Name>.def` / `<Name>_zrx.def`(导出 `acrxEntryPoint`、`acrxGetApiVersion`)。
- `target_set_name_and_suffix(target <Name> ".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<CAD_SDK_VERSION>.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(<target> "<Name>" ".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 中间产物。