赞
踩
本博客主要参考官方安装文档
以及部分CSDN的博客,部分内容的书写会直接参考官方文档的内容。
同时,如果遇到了一些匪夷所思且完全找不到方向的报错,可以尝试去社区搜索相关报错或者提问,开发者们都比较活跃。
这是社区
Slicer依赖于一些大型的第三方库,例如VTK、ITK和DCMTK,构建时间很长,占用空间较大,笔者使用的的Debug模式进行构建,使用了60G的磁盘空间,如果需要进行后续开发,建议准备更多的磁盘空间。
根据官方文档所写,在台式机电脑上预计花费3-4小时,在笔记本电脑上可能会花费8-12小时(不同配置可能会有差距)。
项目整体极其庞大,解决方案和子项目众多,笔者的构建文件夹中总共有接近20w个文件。
笔者所用的相关配置如下:
在七月的源码cmakelists中,cmake版本3.21.0和CMake >=3.25.0,<=3.25.2的版本不受支持,请选择其他版本的cmake。
否则可能会报错FATAL_ERROR "CMake version is 3.21.0 and using CMake==3.21.0 is not supported.
这个不是固定的,需要根据你源码里所提示的进行更换cmake版本。
官方的python脚本翻译需要Qt6.3.0及以上版本,截至目前还没完全启用。
Linux需要5.12版本的QT
VS2019的v142工具集官方没有测试,但是通过其他博客看来,可能仍然有效果
与常见的另一款工具ITK-SNAP不同,ITK-SNAP在构建之前需要对依赖的库例如CURL,VTK,OpenCV,ITK进行单独的构建,然后在ITK-SNAP本体进行configure的时候链接到相关的库;
而Slicer的源码中,在其源码的子文件夹 \SuperBuild
里已经包含了自身依赖的库,这也是Slicer源码构建工程庞大的原因。
Slicer是基于python和C++开发的,在构建的过程中也会用到python的库,但是正如上面提到,Slicer自身包含了相关依赖,这个包含也包括了Python在内,所以构建过程中,如果主机本体在其他位置也有python环境,可能导致构建时候错误调用,没有使用到Slicer自身需要的python环境。所以,请在构建的过程中删除环境变量中的有关python的所有引用,或者对其他python暂时性的重命名。
需要准备科学上网的方式,前面提到,Slicer整体大项目是会自己构建自己需要依赖的库,所以Slicer会去github上自行下载相关依赖的源码,而你需要为其准备一个稳定的网络环境,并且最好打开全局模式,如果你使用的是Clash,最好还要打开TUN mode。从网络上的博客来看,绝大部分问题都是网络问题,所以可以反复进行构建,直到剩下构建失败的项目不再变化。
值得一提的是,在构建到最后的时候,还需要关闭一下科学上网,因为当需要从github拉取的操作完成后,后续还会通过Slicer的python进行pip安装一些相关库,而这个过程如果有代理很可能会导致失败。
需要新建一个文件夹作为源码目录,然后在源码目录下或者同级目录新建build文件夹。
样例:
源码文件夹:D:\S\Src
编译文件夹:D:\S\Bd
注意:
三到四级深的目录后续可能会报错字符长度超过250个。
Build-R
和Build-D
; 建议直接拉取Github的源码进行编译,据说直接下载源码编译会在最后编译的时候报错。
将源码拉取到前文创建的源码目录:D:\S\Src
(请根据实际情况修改,本文的两个目录路径都只作为演示)
这是拉取命令:
git clone https://github.com/Slicer/Slicer.git .
注意命令末尾的点不能省去,如果省去的话git会在当前目录中额外创建一个slicer子文件夹。
add entry
,新建一个Qt5_DIR
,类型为PATH
,具体指向你个人的QT安装路径下的该文件夹:$QT_INSTALL_PATH$/Qt5.15.2/5.15.2/msvc2019——64/lib/cmake/Qt5
路径需要根据自己的实际QT路径情况进行修改。
如果需要在Release模式构建,有两种处理方法:
- 在最后Visual Studio进入解决方案(slicer.sln)后,在顶部栏中选择Release
即可。
- 在CMake中,把参数CMAKE_CONFIGURATION_TYPES
修改为只有Release
的形式,这个方案可以很大程度规避一些人为遗忘导致的错误勾选Debug模式。
路径和参数都添加完毕后,点击Configure
,配置选择Visual Studio 17 2022
和x64平台,
多次configure
直到没有红色的参数出现,点击Generate
生成解决方案,然后点击Open Project
打开该解决方案。
CMake\SlicerCheckCMakeHTTPS.cmake
,文件中有个url是"https://raw.githubusercontent.com/Slicer/Slicer/main/CMakeLists.txt" ,可以改为国内能自由访问的网址如"www.baidu.com" 。确实可以这样来规避此问题,亲测有效。 进去解决方案,直接生成ALL_BUILD
项目,然后就开始等待了。(该过程会比较漫长)
在该部分遇到的部分问题可以参考下文的 VS中问题汇总
当前的sln项目所在的目录,是我们的build目录,其中包含特别多的子解决方案,包括CTK、ITK、DCMTK、VTK、CURL等,也包括了一个名为Slicer的子解决方案,路径为build\Slicer-build\Slicer.sln
,打开这个子解决方案,就可以看到Slicer的源码了。
正确的打开方式应该是:
通过终端进入当前的build目录,即D:\S\Bd
cd Slicer-build
./Slicer.exe --VisualStudioProject
通过命令打开的VS,才能正确的运行slicer软件。
进入VS后也可以先找到All Build
进行一次生成,没有报错后再修改启动项。(这一步不是必须的,如果后期项目源码有修正,可以使用这一步)
在这个解决方案中,选择左侧的App-Slicer文件夹,将里面的SlicerApp设置为启动项,然后运行项目,就可以成功启动Slicer了,同样,在$Build$\Slicer-build\Slicer.exe
也可以启动Slicer。
error
,挨着查找输出给出的错误,能够查看输出的错误详细信息。python-\*
命名的项目生成失败了,可能能发现是在调用PythonSlicer.exe
执行-m pip install
相关操作失败了,这时候就关闭科学上网,笔者是因为在自身的代理环境下,python没法访问相关的镜像去下载库,所以导致了失败。1. 在目录
\build
下能看到一个名为CTK_build
的目录,在这个位置新建一个CTK_install
文件夹,注意是和CTK_build
同级
2. 然后用Cmake-gui去打开CTK_build
,将参数CMAKE_INSTALL_PREFIX
的值修改为刚刚创建的CTK_install
文件夹的路径,然后再configure
和generate
解决方案,接着open project
打开解决方案,在VS中生成ALL_BUILD
3. 在生成CTK的ALL_BUILD
时候可能会在项目PythonQt报错,还是用cmake-gui打开build\CTK_build\PythonQt_build
,不用修改,configure
和generate
解决方案,接着open project
打开解决方案,在VS中生成ALL_BUILD
,最后生成INSTALL
项目来安装PythonQt
4. 再次回到CTK解决方案中,生成ALL_BUILD
,编译完成后INSTALL
就行。
5. 最后再次回到Slicer中,生成ALL_BUILD
build\CTK\CMake\ctkWrapPythonQt.py
,文件第92行:添加内容encoding = "utf-8"
,然后再进行ALL_BUILD就没问题了。
尽量避开在早上构建Slicer,看意思在欧美时间的夜晚可能构建的night版本加载不出来扩展
这个问题在cmakelists.txt里面能看到,这个version版本号和你的拉取有关,当我自己复刻了仓库并自行提交了几个更改后,再进行拉取,我的版本号直接快了拉取官方的构建好几个版本,比如我自己构建的时候官方的版本号是31876,我拉取下来是31877,官方次日更新到31878,我自行修改后,版本号变成了31885。
SPKC上压根没有我自己修改后生成的版本号,所以我在cmakelists里强制修改了我的版本号。
方法就是改变根目录cmakelists.txt
文件中的参数slicer_forced_revision
的值,我强制设定为了31878,之后重新编译就可以正常访问了。
#set(Slicer_FORCED_REVISION "" CACHE STRING "Overwrite value of automatically set Slicer_REVISION")
set(Slicer_FORCED_REVISION "31878")
截止博客撰写时间,最新的版本号是32900
23-07更新:
7月再次用源码构建了Slicer,在这几个月中也重复构建了几次,这里会更新一些版本的相关问题,例如cmake的版本要求又发生了变化。
之前构建完成后经常出现扩展页面空白的情况,现在勉强搞清楚了原因。
24-06更新:
补充了几个细节问题,完善了整体的构建流程。例如命令行打开slicer-build
项目。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。