做医学影像开发的朋友,对 3D Slicer 应该都不陌生。这款开源软件在临床科研、手术导航、图像分割配准这些场景里几乎是绕不开的存在,但大部分人用的是官方预编译包,真正自己动手在 win11 下从源码编译 3D Slicer 5.7 的人,并不多。恰好最近我要在课题组环境里做 C++ 模块二次开发,必须把源码版跑起来,于是完整走了一遍流程。这篇文章就把整个过程掰开揉碎讲清楚,适合准备入坑 Slicer 源码编译、想在 Windows 上搭建开发环境的开发者参考。
先给结论:在 win11 下编译 Slicer 5.7 不是一件“点击下一步”就能完成的事,整个流程涉及源码拉取、CMake 配置、第三方依赖编译、大工程构建、各种环境变量和杀毒软件的斗智斗勇。但它也没有想象中那么难,只要理解 Slicer 的构建逻辑,按顺序配好环境,绝大多数坑都能提前避开。下面我从构建思路、环境准备、配置参数、编译过程、问题排查这几个维度,把我踩过的和替你们踩过的坑都写出来。
1. 为什么非要源码编译:Slicer的构建体系决定了你只能硬刚
1.1 源码编译的真实价值
官方明明有编译好的安装包,直接下载解压就能用,为什么还要自己编译?这是我被问得最多的问题。对纯临床用户来说,确实没必要;但如果你是研究人员或者算法工程师,源码编译基本是刚需。比如要在 Slicer 里加一个自定义分割算法模块,C++ 模块必须基于同一套源码编译,否则 ABI 对不上,模块加载会直接报错;又比如你想追踪某个 bug,打断点看 VTK 或 ITK 内部的数据流,没有调试符号和源码是做不到的;再比如课题组要做自动化集成,希望 CI 流水线每天自动拉最新代码构建一版,那也绕不开源码编译。
Slicer 本身是开源免费的,源码托管在 GitHub 上,社区更新很活跃。5.7 这个版本在渲染管线、虚拟现实支持、Python 集成方面都有不少改进,编译时注意选择 release tag,不要直接拿 main 分支,否则随时可能踩到开发中代码的坑。
1.2 认识Superbuild:Slicer不是普通CMake项目
我第一次编译 Slicer 时犯了一个错误:拿它当普通 CMake 项目处理,以为cmake .. && make就完事了。结果 configure 过程中跳出来一大堆依赖下载,我才意识到这根本不是普通项目。
Slicer 用的是 CMake 的 Superbuild 模式。什么是 Superbuild?简单说,它不只是构建 Slicer 自己,而是把 Slicer 依赖的所有第三方库,包括 VTK、ITK、CTK、Python、Qt 插件等,全部下载、编译、安装到一个统一目录,然后再构建 Slicer 本体。用装修来比喻,普通 CMake 项目是“建材都买好,你只管装修”,Superbuild 是“从烧砖开始,每一步都在你眼皮子底下进行”。
这样设计的原因也很实际:Slicer 要同时支持 Windows、Linux、macOS 三大平台,如果每个平台都用系统自带的第三方库,版本参差不齐,很容易出现“在这台机器上正常,换台机器就崩”的问题。Superbuild 把依赖版本全部锁定,保证所有平台构建出来的 Slicer 行为一致。代价就是第一次编译时间非常长,而且对网络和环境要求高。
1.3 构建类型与工具链选型
编译前先想清楚要 Release 还是 Debug。Slicer 在这块的默认行为有点特殊:它不直接让你在 CMake 里选CMAKE_BUILD_TYPE一劳永逸,因为用 Visual Studio 生成器时,构建配置是在cmake --build或 VS 解决方案的配置下拉框里选的。如果你用 VS 工程,请统一选择 Release;如果确实要调试 C++ 代码,用 RelWithDebInfo 折中,既保留性能又保留 PDB 符号文件。纯 Debug 版 Slicer 体积巨大,运行慢到让人怀疑人生,而且有些第三方库在 Debug 下还容易触发不稳定的内存断言。
工具链方面,win11 下推荐 Visual Studio 2022 + Qt 5.15.2(MSVC 2019 或 2022 的 64 位工具链)。注意,Slicer 5.x 系列还不支持 Qt6,不要手误装成 Qt6,否则配置阶段会直接告诉你找不到 Qt5。这个我在第三部分展开讲。
2. win11编译环境准备:这一步决定你后面会不会崩溃
2.1 硬件与磁盘规划
先说说硬件门槛。Slicer 源码编译不是闹着玩的,建议内存至少 16GB,32GB 体验更稳。为什么内存要求高?因为 VTK 和 ITK 这两个大库编译时,每个编译进程吃内存都很猛,并行数一高,16GB 很容易被吃满,然后系统开始疯狂使用虚拟内存,编译速度断崖式下降,甚至直接报fatal error C1083之类的问题。
磁盘空间也一定要留够。完整源码加构建产物,体积很容易超过 60GB,加上第三方库的源码包和中间文件,预留 100GB 比较稳妥。硬盘建议纯 SSD,机械盘不是不能用,就是编译时间会从“睡一觉”变成“睡两觉”的量级。路径方面,强烈建议所有跟编译相关的目录都放在纯英文路径下,不要有空格,更不要有中文。Windows 下的 C++ 工具链对中文路径的兼容性很微妙,有时候编译器预处理阶段能过,链接阶段突然报找不到中间文件,查半天最后发现是路径编码问题。
2.2 必装工具清单及版本匹配
我把需要用到的工具列一张表,按“必备”和“强烈建议”区分:
| 工具 | 推荐版本 | 用途 | 备注 |
|---|---|---|---|
| Git for Windows | 最新稳定版 | 拉取源码、切换分支 | 记得安装时勾选 Git LFS 支持 |
| Visual Studio 2022 | Community 版即可 | C++ 编译器、IDE 调试 | 安装时必须勾选“使用 C++ 的桌面开发”工作负载 |
| CMake | 3.22 以上 | 配置构建系统 | 不需要装 GUI 版,但装了方便看缓存变量 |
| Qt | 5.15.2 MSVC 64 位 | Slicer 界面框架 | 必须是 MSVC 版本,MinGW 版本一定不行 |
| Python | 3.9 ~ 3.12 | 构建辅助、Python 模块开发 | 实际运行用 Slicer 自带嵌入式 Python |
| NSIS | 3.x | 生成安装包 | 如果不打安装包可以跳过 |
| 7-Zip | 最新版 | 解压部分依赖源码包 | 有些第三方库下载的是压缩包 |
这里特别提醒两点。第一,VS2022 安装时一定要在“单个组件”里确认 Windows SDK 版本已经被勾选,很多人只装了 MSVC 编译器,结果编译时找不到windows.h或者vcruntime.h,直接在 CMake 检测 C++ 编译器阶段就挂了。第二,Qt 的安装包现在需要注册 Qt 账号,过程有点繁琐但没办法,装完以后重点确认C:\Qt\5.15.2\msvc2019_64或msvc2022_64这个目录下有lib\cmake\Qt5Config.cmake,这是后面 CMake 能找到 Qt 的关键。
2.3 win11专属设置:防干扰、防误删、防下载失败
win11 和 win10 在编译环境上本质没区别,但几个系统层面的坑还是要提前处理。
第一个是 Windows Defender 的实时保护。编译过程会生成海量 exe、dll,Defender 的实时扫描可能会锁文件或者直接隔离编译产物。我遇到过一次最离谱的情况:Slicer 依赖的某个 dll 被 Defender 隔离掉了,但 VS 报告的是“找不到文件”而不是“病毒”,排查了两小时才发现隔离区里有东西。解决办法是把源码目录、构建目录、Qt 安装目录都加入 Defender 的排除列表,路径在“Windows 安全中心 - 病毒和威胁防护 - 排除项”里加。如果有公司统一安装的第三方安全软件,最好在构建期间设置白名单或者临时退出。
第二个是 win11 的右键菜单默认折叠。老用户可能不太适应,但编译过程中受到的直接影响不大,顶多是你想快速用 PowerShell 打开目录时多一步“显示更多选项”。真正值得注意的是 win11 默认开启了基于信誉的防护,有时会阻止未签名的可执行文件运行,编译出来的 Slicer.exe 第一次启动时如果被杀软拦了,记得在“应用和浏览器控制”里检查一下。
第三个是电源管理。长编译如果中途睡眠,无论是网络下载还是编译器状态都可能异常。把电源计划改成“高性能”,并设置“从不”睡眠。听起来很基础,但我身边真有人因为这个编译失败过,而且是断点续传不知道从哪里接起的那种失败。
3. 源码拉取与CMake配置:关键参数逐个讲清楚
3.1 获取Slicer 5.7源码的正确姿势
源码获取我一般采用 git clone。Slicer 的仓库结构比较复杂,包含多个子模块,所以不能只下载 zip,必须用 git 把子模块一并拉下来。建议的命令是:
git clone --branch v5.7.0 https://github.com/Slicer/Slicer.git D:/Slicer/src cd D:/Slicer/src git submodule update --init --recursive注意v5.7.0这个 tag 名,建议以 GitHub Releases 页面实际展示的为准。如果你本地已经克隆过 main 分支,可以这样切:
git fetch --tags git checkout 5.7.0 git submodule update --init --recursive网络环境不稳定的情况下,全量克隆容易中途失败。我自己实践下来,最稳妥的是先浅克隆,再拉 tag:
git clone --depth 1 --branch v5.7.0 https://github.com/Slicer/Slicer.git D:/Slicer/src浅克隆体积小,失败概率低。如果 clone 到一半断了,不用删除重新来,git 是支持断点续传的,直接再执行一次相同的 clone 命令(目标目录必须为空或者同一个仓库),通常能继续。拉完子模块后,检查一下D:/Slicer/src/Modules等目录是不是有内容,如果为空说明子模块没更新成功。
3.2 CMake配置中必看的关键开关
源码拉完,进入 CMake 配置阶段。Slicer 的 CMake 参数非常多,但大部分保持默认就行,真正需要留意的开关其实就那么几个。
Slicer_USE_PYTHONQT:默认 ON。这个开关控制 Slicer 的 Python 集成界面,如果你关了,整个 Python Console、Python 扩展模块全部不可用。做二次开发务必保持 ON。Slicer_BUILD_WEBENGINE:这个开关控制是否编译 Qt WebEngine 组件。WebEngine 体积巨大、编译极慢,如果你不需要 Slicer 里内嵌网页功能,建议关掉,能显著缩短编译时间。注意关闭后一些依赖网页界面的扩展模块可能无法使用。BUILD_TESTING:默认 OFF。除非你要跑 Slicer 的自动化测试,否则保持 OFF,减少编译负担。Slicer_USE_SYSTEM_*:一系列指向系统库的开关,比如Slicer_USE_SYSTEM_QT、Slicer_USE_SYSTEM_ITK。除非你非常清楚自己在做什么,否则不要打开。Slicer 对每个第三方库的版本要求极其苛刻,用系统库版本一不对就是各种诡异崩溃。CMAKE_BUILD_TYPE:在命令行配置时建议设置为 Release,有些生成器忽略它,但设了更保险。
这些开关的说明其实都能在 CMake Cache 里看到完整描述。如果你用cmake-gui,配置界面里搜索关键词,每个条目的说明文字都写着,遇到不确定的选项不要乱动,先查再改。
3.3 一份可直接套用的CMake配置参考
以我本次环境为例,源码目录是D:/Slicer/src,构建目录是D:/Slicer/build。打开“开发者 PowerShell for VS 2022”,执行:
cmake -S D:/Slicer/src -B D:/Slicer/build -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DSlicer_BUILD_WEBENGINE=OFF如果 CMake 找不到 Qt,可以手动指定 Qt 路径:
-DCMAKE_PREFIX_PATH=C:/Qt/5.15.2/msvc2022_64这里有个细节要提醒:Qt 的 MSVC 工具链版本最好和 VS 匹配。VS2022 对应 2022 工具链,但 Slicer 官方 CI 常见的是 msvc2019_64 配 VS2022,问题也不大。本质上编译器能读 Qt 的 lib 就行,关键是不能跨 32/64 位混用,不要用 mingw 版本。
配置完成后,打开D:/Slicer/build/Slicer.sln,你会看到解决方案里一堆项目。不要慌,这不是异常,Superbuild 项目本来就是这样的,几十个项目是正常的。我见过有人看到这么多项目直接当场放弃,其实大部分是第三方库的外部项目,构建时按依赖关系自动排好序了。
3.4 配置失败的常见原因
配置阶段最常见的报错五花八门,但归类起来就几种。
第一类:找不到编译器。提示No CMAKE_CXX_COMPILER could be found。这个一般是 VS 组件没装全,或者你没有在“开发者 PowerShell”里执行 cmake 命令。普通 PowerShell 的环境变量里没有 MSVC 的cl.exe路径,CMake 自然找不到。
第二类:找不到 Qt5。提示Could not find a package configuration file provided by "Qt5"。基本就是CMAKE_PREFIX_PATH没指对,或者 Qt 安装的是 mingw 版本。我建议在配置之前先手动检查一下 Qt 目录下有没有Qt5Config.cmake文件。
第三类:网络下载依赖超时。提示Failed to download加一串 URL。这个跟本地网络环境有关,也可能是某个第三方库的服务器响应慢。Slicer 的 Superbuild 设计得比较友好,下载失败后不会残留脏状态,重新执行 cmake 配置一般会接着下载,不需要删缓存。
4. 正式编译:从零到Slicer.exe的完整过程
4.1 用VS工程还是Ninja
Slicer 在 Windows 下最成熟的构建路径是 Visual Studio 工程。VS 工程的好处是图形化界面直观,能看进度,能单独重新生成某个项目,调试 C++ 代码也方便。坏处是编译效率比 Ninja 略低,而且项目数量多,编译输出窗口滚动快得像开盲盒。
如果你熟悉命令行,可以用 Ninja 生成器:
cmake -S D:/Slicer/src -B D:/Slicer/build_ninja -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DSlicer_BUILD_WEBENGINE=OFF cmake --build D:/Slicer/build_ninja -- -j 8-j 8控制并行任务数,根据自己的 CPU 核心和内存大小调整。Ninja 在增量编译上比 VS 快不少,但相对更难观察进度,新手还是建议先用 VS 工程,跑通了再考虑优化构建效率。
4.2 编译过程会经历什么
正式编译开始后,你会看到大量第三方库依次进入构建流程。大致顺序是:基础工具(zlib、openssl、curl)→ 图像与可视化库(ITK、VTK)→ 医学交互框架(CTK)→ Qt 相关组件 → Slicer 本体。每个库都会先下载源码再编译安装,所以你会看到网络有流量、CPU 有占用、构建目录体积越来越大。
这个过程中,最忌讳的是无事可做一直盯着输出窗口。Slicer 整个编译时间非常长,我测试过几台机器:8核16线程大概要 8~10 小时,16核32线程顺利的话 4~5 小时能完成。建议选在晚上开始编译,第二天早上验收。
如果编译过程中出现错误,VS 输出窗口最后一行会显示error关键字。先不要慌,把错误日志复制出来,重点看是哪个项目报错、报错代码是什么。Slicer 的构建是带依赖链的,某个第三方库失败会导致后续项目连环失败,但不代表你的编译环境全部坏了,修复根因后重新生成失败的项目就行。
4.3 编译产物怎么组织、怎么运行
很多新手第一次面对构建目录会犯懵,因为 Slicer 的产物组织比普通项目绕。简单说,构建目录下有两个层面的输出:外层是 Superbuild 的中间层,里面是 Slicer 本体的工程目录。最终可执行文件通常位于D:/Slicer/build/Slicer-build/Slicer.exe。如果用的 VS 生成器,可能在Slicer-build/Release/Slicer.exe之类的子目录里,根据解决方案配置不同而不同。
双击这个 exe 就能启动 Slicer,看起来是个普通的 Windows 程序。但注意不要把 exe 复制到桌面当绿色软件用,Slicer 的启动依赖旁边的库文件和 launcher 机制,随便移动会报找不到模块。如果你要打包给课题组其他同学用,正规渠道是用 Slicer 的打包工具生成安装包,而不是手动拷 exe。
4.4 增量编译修炼:改源码后如何高效rebuild
编译跑通一次之后,日常开发最常做的事就是改代码再编译。这时候如果每次都整个解决方案重新生成,就是在浪费生命。正确的做法是:在 VS 解决方案里找到Slicer这个主项目,单独重新生成它。大部分 C++ 改动只影响 Slicer 本体,重新生成只要几分钟;如果改了 VTK 或 ITK 源码,那就需要重新生成对应的第三方库项目,时间会陡增。
改纯 Python 模块就更简单了,Slicer 的 Python 模块代码在源码目录的Modules和Python目录下,改完直接重启 Slicer 就能生效,不需要任何编译。很多刚接触的人不知道这一点,把 Python 模块改了之后去点“重新生成解决方案”,白白等一个多小时。
5. 实用主义者的避坑清单:编译过程中那些必须知道的事
5.1 内存与磁盘问题的系统级处理
编译时内存爆掉是最常见的挂掉方式。VS 默认会根据 CPU 核心数启动尽可能多的并行编译任务,16 核机器如果跑 16 个cl.exe,一个进程吃几个 GB 内存很常见。解决办法不是加内存条立省 1000 元,而是在编译命令里限制并行数。VS 工程可以在编译命令行参数里加/m:8;Ninja 则是前面提到的-j参数。我建议先按“内存 GB 减半”来估算并行数,比如 16GB 内存就-j 8,32GB 再考虑-j 12或更高。
磁盘空间问题则是另一个无声杀手。构建目录从一开始就是几 GB,然后像滚雪球一样变大。建议编译前先看磁盘剩余空间,低于 120GB 就不要开始。中途如果发现空间不足,清理方向要精准:Slicer-superbuild/Download目录下是下载的源码包,删了可以省空间但要重新下载;Slicer-superbuild/Build目录是中间文件,不能乱删;Install目录是编译好的依赖库,更是一动都不能动。最安全的做法是删掉整个 build 目录重新来,但那就意味着从头编译。
5.2 杀软与Defender的“热心帮助”
这部分内容我觉得价值最高,因为官方文档不会写。Windows Defender 默认开启的实时保护,会对新生成的 exe、dll 做扫描,大量小文件的编译过程中,这种扫描会导致两方面问题:一是性能损耗,编译时间变长;二是误报或假阴性导致文件被隔离,使得下一步构建找不到刚生成的依赖库。
我遇到的情况是第三方库的某个测试 exe 被 Defender 识别为Win32/Injector自动隔离,然后上层项目链接时找不到导入库,报错信息毫无指向性。解决流程很简单:编译前把构建目录加入 Windows Defender 排除项,把源码目录也加进去,因为源码目录包含一些 32位的辅助工具。如果你用的是第三方杀毒软件,直接在整个编译期间退出或者把相关目录加入白名单。实测这一波操作能让编译成功率从 70% 提到 95% 以上。
5.3 VS环境与路径污染的排查
另一个容易让人抓狂的问题是 VS 环境变量污染。Slicer 配置时用了很多第三方库,如果系统 PATH 里有不兼容的 CMake、Python 或者 Qt 版本,CMake 检测时可能会被干扰。比如我环境里装了 Anaconda,系统的python.exe指向 conda 的 Python,就会导致 CMake 在找 Python 解释器时优先命中 Anaconda 而不是系统解释器。
解决方法是在配置和编译时,尽量使用“开发者 PowerShell for VS 2022”这个入口。它会自动设置 MSVC 编译环境变量,避免手动配置出错。同时,在执行 cmake 命令前,可以把QTDIR、PYTHONHOME这类可能冲突的环境变量暂时清空,确保 CMake 不靠猜,而是靠我们传入的参数找到正确组件。
还有一个隐蔽问题:如果源码目录放在 OneDrive、坚果云这类同步盘下,文件会被同步工具加锁或频繁触发更新,编译器读取时会出现随机性失败。请把源码和构建目录放在本地非同步目录下。
5.4 版本坑:Qt、Python、CMake三者匹配
版本匹配是 Slicer 编译里最玄学的一部分,我在不同机器上试过几套组合,总结如下:
| Slicer 版本 | 推荐的 Qt 版本 | 推荐的 CMake | 推荐的 VS | 备注 |
|---|---|---|---|---|
| 5.4 | Qt 5.15.2 | CMake 3.21+ | VS2019 / 2022 | 相对稳定 |
| 5.6 | Qt 5.15.2 | CMake 3.22+ | VS2022 | 官方 CI 常用组合 |
| 5.7 | Qt 5.15.2 | CMake 3.22+ | VS2022 | 我实测通过 |
Qt 版本使用非官方默认值时,经常会出现一些让人摸不着头脑的界面问题,比如按钮图标不显示、字体渲染异常、Launcher 启动后 Slicer 主窗口闪退。建议优先采用官方 CI 的推荐组合,具体可以从Slicer/CMakeLists.txt里的Slicer_REQUIRED_VERSION相关宏定义看到版本限制。
Python 模块的坑也很典型。Slicer 自带嵌入式 Python,构建时会自动下载相应版本的 Python,这里的 Python 与你系统里安装的 Python 是两回事。在 CMake 配置阶段不要手动指定PYTHON_EXECUTABLE,除非你明确知道为什么要指定。很多教程为了图省事建议指定系统 Python,结果 build 到一半发现 Python 头文件版本和链接库版本对不上,报的错还很玄幻。
6. 编译完成之后:验证、调试与二次开发准备
6.1 首次启动前的验证清单
编译完成那一刻,你会看到Build succeeded或者 VS 输出窗口里没有红色错误。先别急着庆祝,按以下清单验证一遍,比什么都重要。
第一步,确认Slicer.exe确实存在,路径之前说过,可以搜索构建目录下的Slicer.exe。第二步,第一次启动前最好在命令行里先跑一次,这样即使启动失败,命令行里也能看到标准错误输出:
D:/Slicer/build/Slicer-build/Slicer.exe --disable-crashpad--disable-crashpad是调试期常用的启动参数,避免崩溃后弹出 Crashpad 上传窗口干扰你读正式报错。正常启动后,进入Help -> About看版本号和 commit 哈希,与源码目录下git rev-parse HEAD的输出一对比,确认编译的是你想要的那个版本。
第三步,打开 Python Console,输入dir(slicer)验证 Python 包装层是否完整。如果输出一堆类名,说明 Python 集成部分正常工作。我见过有人编译完了只有 C++ 界面,Python 控制台直接一个空白面板,大概率是 PythonQt 相关模块没有编译进去,回头检查Slicer_USE_PYTHONQT开关。
6.2 从源码调试:如何附加VS调试器
编译完成只是一个开始,二次开发才是源码编译的核心意义。调试 Slicer 的 C++ 代码,推荐用 VS 的“附加到进程”功能:先启动 Slicer.exe,然后回到 VS,菜单调试 -> 附加到进程,选中 Slicer.exe,加载 PDB 符号后就能打断点了。
为什么要用附加而不是直接 F5 启动?因为 Slicer 启动时要通过 Launcher 设置一堆环境变量,你想在 VS 里直接运行 Slicer 项目,需要正确配置工作目录和环境,比较麻烦。而附加进程方式简单稳定,上线排障时也常用这种套路。
首次附加调试时,VS 会卡一阵子,因为要加载巨量符号文件。可以先把 VS 的符号缓存配置好,或者只加载 Slicer 本体的 PDB,不加载第三方库的 PDB,加载速度会快很多。另外建议开启“仅我的代码”之外的原生调试模式,否则自定义模块的断点可能灰掉。
6.3 模块开发:Slicer模块与扩展初探
环境搭建完成之后,接下来就是发挥价值的阶段了。Slicer 开发模块通常分两类:Python 模块和 C++ 模块。Python 模块只需要把代码放到源码目录的Modules下,或者通过 Slicer 的扩展机制加载,改完即生效。C++ 模块需要编译,但也不需要每次都全量构建,单独生成你写的模块项目就行。
我自己的经验是:如果只是做算法快速验证,优先用 Python;等算法稳定、有性能瓶颈,再把核心逻辑下沉到 C++ 模块。Slicer 本身已经用 VTK/ITK 处理了绝大部分底层图像计算,Python 的编码效率高且灵活,Python 版性能往往已经足够,刻意追求 C++ 反而拖慢开发节奏。
开发扩展模块时,可以用--additional-module-paths参数指定本地模块目录,这样 Slicer 每次启动都会加载你正在开发的模块,非常适合迭代调试。
写在最后的一点体会
回过头看全过程,编译 3D Slicer 5.7 最耗时间的其实不是编译本身,而是各种环境问题交叉出现时的排查时间。我个人的经验是:首次编译尽量按官方默认工具链来,不要“自作聪明”升级或替换依赖版本;编译前把杀毒排除做扎实;不要在编译过程中频繁打断或者随手改 CMake 配置。环境理顺之后,后面做模块开发会一天比一天顺。这篇内容里的每一步我都实测过,如果你也是准备在 win11 下搭建 Slicer 开发环境,照着这个流程走,能少熬几个夜。祝一次过。