# 构建系统 **结论:现在统一用 CMake 构建,不再使用 Visual Studio 工程文件(`.vcxproj`/`.sln` 已删除)。** ## 基本命令 ```bash # 在 SourceCode/Code2026 目录 cmake --preset R250 # 配置(示例:AutoCAD 2025-2026) cmake --build --preset R250 # 编译 ``` - CMake ≥ 3.21,生成器 `Visual Studio 18 2026`,架构 `x64`。 - 工具集按 preset 指定(如 `v143` / `v142` / `v141` …)。 - 启用 `/MP` 多进程编译;Release 默认 `_NDEBUG`。 ## 配置预设(`cmakepresets.json`,13 套) | 分组 | preset | 说明 | | --- | --- | --- | | AutoCAD | `R180 R190 R200 R210 R220 R230 R240 R243 R250 R260` | ARX 18~26(CAD 2010~2027) | | 中望CAD | `Z2023 Z2024 Z2025 Z2026` | ZRX 2023~2026 | 关键 cache 变量: - `CAD_SDK_ROOT`:`arx/` 或 `zrx/`(相对 `SourceCode/Code2026` 上一级的上一级)。 - `DEP_LIB_ROOT` / `DEP_INC_ROOT`:`../dep_lib` / `../dep_inc`。 - `PRODUCT=ENV_2025_V6_S0`、`TRIAL_YEAR=2026`。 - `GENERATE_BIN_DIR` / `GENERATE_LIB_DIR`:输出到 `bin/Code2026`、`lib/Code2026`。 C++ 标准自动切换:ARX 26→C++20;ARX 25/24 与 ZRX→C++14;更老版本→C++03/98。 ## 构建脚本 - `cmake/functions.cmake`:核心封装 - `add_custom_module(dir folder)`:注册子模块(自动 `add_subdirectory` + 设置 FOLDER)。 - `target_link_objectarx(target EXT)`:链接 CAD SDK 与全局头。 - `simple_link_cad_sdk`:自动区分 ARX / ZRX。 - `set_encryption_definitions_and_output_path`:**授权模式**,生成 `BAL_REMOTE` 与 `TRIAL_YEAR` 两种版本。 - `set_debug_post_build`:调用 `copyarx.exe` 做 post-build 部署。 - `cmake/ThirdPartyDeps.cmake`:定义 `ThirdParty::ARX` / `ZRX` / `SQLite3` / `cURL` / `TG` / `modernGlue` / `BitAnswer` 等接口目标。 - 顶层 `cmakelists.txt`:注册所有模块并组织 `FOLDER`(`SH/Core`、`SH/Pipe` …)。 ## 授权 / 加密 - `CoreCommand` 通过 `get_encryption_modes()` 生成两种产物: - `BAL_REMOTE`(网络锁 / 正式版) - `TRIAL_YEAR`(1 年期试用版) - 依赖 **BitAnswer**(加密狗库),加密表由 `utility/generateEncryptionTable` 生成。 ## 部署与打包 - **部署**:`sh_output_path.json`(ACAD)/ `zw_output_path.json`(中望)定义从 `bin/Code2026` 拷贝到安装目录 `c:\ShangHuaSoft\Envi3D-2026-M`;由 `copyarx.exe` 执行。 - **打包**:`autoCompile/` 内含 Inno Setup(`*.iss`) + Python(`SHSCompile.py`) + 多个 `.bat`,覆盖 ACAD/中望、1年期/加密版、以及客户专版(中广核、国能集团等)。 ## .gitignore 要点 忽略:`Arx/`、`cmake_output/`、`bin/`、`lib/`,以及所有 VS 中间产物(`*.obj/*.pdb/*.user/.vs` 等)。