我把 CAD 插件编译做成了"一键多版本":arx-build 工作流全拆解
做 AutoCAD / 中望 / 浩辰二次开发的朋友,大概率都经历过这样的时刻:
为了把同一个插件适配到 AutoCAD 2014、2021、2026、2027,再加上中望 GRX、浩辰 ZRX 的静态库 / 动态库变体,你得在 Visual Studio 里手动切换十几个配置,逐个点"生成",还得祈祷 MSBuild 路径别出问题、PostBuild 复制别互相覆盖。
一次完整编完 6 个变体,半小时起步,还容易漏。
后来我把这套流程固化成了一个自动化脚本 —— arx-build。一句话就能把多版本、多平台、多链接模式的插件全编出来。这篇文章把它的设计思路和用法拆给你看。
一、它到底在解决什么
核心痛点有三个:
❶ MSBuild 路径不固定有人装 VS2022,有人装 VS2019,路径各不相同,写死就废。
❷ 配置组合爆炸年份(2014~2027)× 后缀(d/B/S)× 平台(ARX/GRX/ZRX),手动切根本记不住。
❸ 多项目 PostBuild 冲突同一个产品的静态库版和动态库版常复制到同一目录,并行编译会互相覆盖。
二、MSBuild 动态发现,不写死路径
arx-build 不假定任何硬编码路径。每次构建先用 vswhere 探测:
"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" ^ -latest -requires Microsoft.Component.MSBuild ^ -find MSBuild\**\Bin\MSBuild.exe探测失败再回退到常见路径(%ProgramFiles%\Microsoft Visual Studio\*\*\MSBuild\Current\Bin\MSBuild.exe),仍失败才提示你确认 VS 是否装了 C++ 工作负载。路径解析一次、全程复用。
三、配置矩阵一键展开
配置名遵循 {Year}{Suffix} 规则,例如 2026B = AutoCAD 2026 Release DLL。你只需用自然语言下指令,arx-build 会自动展开成具体的 {vcxproj, config} 列表并和你确认:
B 后缀 | |
B 后缀 |
📌 后缀含义速查:d = Debug DLL(开发调试)、B = Release DLL(发布)、S = 静态库 .lib
工具集对照也内置好了,省得你查:
2027 → v145 (VS2026)2024~2026 → v143 (VS2022)2021~2023 → v142 (VS2019)2014~2020 → v141 (VS2017)
四、冲突自动化解
多项目目录里,arx-build 会扫描每个 .vcxproj 的 PostBuild 复制目标,构建 {项目, 配置, 目标目录} 矩阵,找出碰撞。提供三种策略:
| Sequential(默认) | ||
| Skip PostBuild | ||
| Overwrite OK |
五、编译 + 校验 + 报表
展开确认后,命令模板是这样:
"{MSBUILD}" "{project}" ^ /p:Configuration={Config} /p:Platform=x64 ^ /t:Build /v:minimal /m/v:minimal 让输出安静,/m 开启并行。编完逐配置校验:退出码为 0、产物文件存在(x64\{Config}\{Project}{Year}.dll 或 .grx / .zrx / .lib)。最后给出一张报表:
2026B | |||
2026S |
第三方库的 PDB 警告(如 LNK4099)属正常,计入报表但不算错误。
六、一个真实例子
以 ETTransformer 为例,它同时有 ARX / GRX / ZRX 三平台、静态 / 动态两种链接,共 6 个 .vcxproj:
ETTransformer/(Autodesk ARX, LibXL static)ETTransformerD/(Autodesk ARX, LibXL dynamic)ETTransformerHC/(HCSoft GRX, LibXL static)ETTransformerHCD/(HCSoft GRX, LibXL dynamic)ETTransformerZW/(ZWSoft ZRX, LibXL static)ETTransformerZWD/(ZWSoft ZRX, LibXL dynamic)一句"编译全部 2026"下去,arx-build 自动展开成 6 组 {vcxproj, config},先做冲突检测,再分批编译,最终一份报表告诉你哪些成功、哪些失败、失败原因是什么(比如 LNK1104 找不到 LibXL)。
结语
把重复劳动交给脚本,把精力留给真正写功能。
如果你也在做 CAD 插件开发、被多版本编译折磨
关注公众号 【橡皮的CAD开发】,回复 arxbuild 获取脚本与工程模板
✨ 本文由橡皮与 AI 协作完成基于 arx-build 工具链的真实技术方案整理经橡皮审校后发布于【橡皮的CAD开发】
夜雨聆风