乐于分享
好东西不私藏

我把 CAD 插件编译做成了"一键多版本":arx-build 工作流全拆解

我把 CAD 插件编译做成了"一键多版本":arx-build 工作流全拆解

我把 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} 列表并和你确认:

你说
展开为
编译全部 Release DLL
所有项目,仅 B 后缀
编译 2026 全部
所有项目,所有后缀,年份 2026
编译 XX 最新版
该项目,最新年份,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)。最后给出一张报表:

Config
Type
Status
Output
2026B
DLL
x64\2026B\ETTransformer2026.dll
2026S
.lib
x64\2026S\ETTransformer2026S.lib

第三方库的 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开发】