Slicer中启动器的生成过程
程序的生成过程
SlicerCAT.exe是Slicer应用程序的一个定制版本,其生成过程主要通过CMake构建系统实现。以下是详细的生成流程:
- 
应用程序配置定义 - 在中,设置应用程序名称为"SlicerCAT",并定义了版本、描述、图标文件等基本属性。
 
- 
应用程序库构建 - 首先使用slicerMacroBuildAppLibrary宏构建应用程序库qSlicerApp,该库包含了主窗口、登录对话框等UI组件。
 
- 首先使用
- 
应用程序可执行文件构建 - 接着,使用slicerMacroBuildApplication宏构建核心应用程序可执行文件:- 在Windows平台上,生成名为SlicerCATApp-real.exe的真实可执行文件
- 该文件包含了Main.cxx中的入口点代码,并链接到之前构建的应用程序库
 
- 在Windows平台上,生成名为
 
- 接着,使用
- 
启动器(Launcher)生成 - 这是SlicerCAT.exe的关键生成步骤:
- 利用CTKAppLauncher框架创建启动器可执行文件
- 配置启动器的环境变量、库路径、Python路径等运行时设置
- 处理启动参数和默认参数
- 配置启动画面(splash screen)
 
 
- 这是SlicerCAT.exe的关键生成步骤:
- 
图标资源更新 - 在Windows平台上,创建自定义目标SlicerCATUpdateLauncherIcon
- 使用CTKResEdit_EXECUTABLE工具将指定的图标文件(Slicer.ico)更新到启动器可执行文件中
 
- 在Windows平台上,创建自定义目标
- 
安装配置 - 配置安装规则,将启动器(SlicerCAT.exe)安装到根目录
- 将真实的应用程序(SlicerCATApp-real.exe)安装到bin目录
- 安装启动器配置文件SlicerCATLauncherSettings.ini到bin目录
- 安装启动画面图像到bin目录(如果启用)
 
- 
启动流程 - 最终用户运行SlicerCAT.exe时,它会:
- 读取启动器配置文件
- 设置必要的环境变量
- 显示启动画面
- 启动真实的应用程序SlicerCATApp-real.exe
 
 
- 最终用户运行SlicerCAT.exe时,它会:
整个过程充分利用了CMake的宏机制和CTKAppLauncher框架,实现了灵活的应用程序打包和启动管理。
CTKAppLauncher生成启动器的过程
CTKAppLauncher生成SlicerCAT.exe的具体步骤如下:
- 
CTKAppLauncher预编译二进制文件下载 - 在中,Slicer作为外部项目自动下载预编译的CTKAppLauncher
- 根据操作系统选择相应版本,Windows平台使用i386架构版本
- 下载版本为0.1.31,从GitHub Releases获取
 
- 
启动器配置准备 - 定义了两类关键配置:
- 构建树配置(BUILD tree):设置开发环境下的库路径、可执行文件路径和环境变量
- 安装树配置(INSTALL tree):设置最终安装版本的路径和环境变量
 
- 这些配置包括库搜索路径(LIBRARY_PATHS)、可执行文件路径(PATHS)、环境变量(ENVVARS)和特殊路径环境变量(PYTHONPATH、QT_PLUGIN_PATH等)
 
- 定义了两类关键配置:
- 
启动器配置生成 - 在中,调用ctkAppLauncherConfigureForTarget宏进行配置:- 设置应用程序名称(SlicerCAT)和版本信息
- 配置启动画面和延迟时间
- 设置默认启动参数和无启动画面参数列表
- 添加额外可执行文件(如designer、cmd等)
- 配置构建树和安装树的环境变量、库路径和Python路径
 
 
- 在中,调用
- 
SlicerCAT.exe启动器生成 - Windows平台上,区分两种启动器模式:
- 控制台版本(CTKAppLauncher):用于命令行和Python控制台
- GUI版本(CTKAppLauncherW):用于主应用程序,无控制台窗口
 
- 创建自定义目标SlicerCATUpdateLauncherIcon,使用CTKResEdit工具将Slicer.ico图标更新到启动器可执行文件中
- 生成SlicerCATLauncherSettings.ini配置文件,包含所有环境变量和路径设置
 
- Windows平台上,区分两种启动器模式:
- 
安装配置 - 将更新图标的启动器重命名为SlicerCAT.exe并安装到应用根目录
- 将真实的应用程序(SlicerCATApp-real.exe)安装到bin目录
- 将启动器配置文件(SlicerCATLauncherSettings.ini)安装到bin目录
- 将启动画面图像安装到bin目录(如果启用)
 
- 
启动流程 - 用户运行SlicerCAT.exe时,它会:
- 读取同目录下的SlicerCATLauncherSettings.ini配置
- 设置所有必要的环境变量、库路径和Python路径
- 显示启动画面
- 调用bin目录下的SlicerCATApp-real.exe作为实际应用程序
 
 
- 用户运行SlicerCAT.exe时,它会:
整个过程通过CMake宏系统实现了高度自动化,确保应用程序在各种环境下都能正确配置并运行。
启动器两种模式的实现过程
CTKAppLauncher在Windows平台上区分两种模式(控制台和GUI)的启动器实现过程如下:
- 
模式控制变量: - 通过CMake选项Slicer_BUILD_WIN32_CONSOLE_LAUNCHER控制,默认值为OFF
- 该选项定义在第48行
- 该选项仅在Windows平台上有效,其他平台上自动设置为OFF
 
- 通过CMake选项
- 
变量传递机制: - 在第423行,Slicer_HAS_CONSOLE_LAUNCHER变量被设置为${Slicer_BUILD_WIN32_CONSOLE_LAUNCHER}的值
- 这个变量成为后续决定使用哪种启动器模式的关键标志
 
- 在第423行,
- 
两种启动器模式: - 控制台模式:使用CTKAppLauncher.exe,启动时显示命令行窗口,适合调试和查看输出
- GUI模式:使用CTKAppLauncherW.exe,启动时不显示命令行窗口,是默认选项,提供更好的用户体验
 
- 控制台模式:使用
- 
启动器配置过程: - 在第712行,调用ctkAppLauncherConfigureForTarget函数配置启动器
- 该函数配置应用名称、版本、splash屏幕、默认参数等设置
- 配置生成相应的启动器配置文件
 
- 在第712行,调用
- 
安装过程中的区分处理: - 在第761行,根据Slicer_HAS_CONSOLE_LAUNCHER的值选择不同的安装逻辑:- 当值为TRUE时,直接安装控制台启动器
- 当值为FALSE时(默认),使用GUI启动器并进行额外处理
 
- 当值为
 
- 在第761行,根据
- 
GUI启动器的特殊处理: - 复制CTKAppLauncherW.exe并重命名为应用程序名称
- 使用CTKResEdit工具更新可执行文件的图标资源
- 最终在安装目录中生成没有命令行窗口的主启动器
 
- 复制
- 
Python控制台的特殊处理: - 根据中的注释,Python控制台始终使用控制台启动器(CTKAppLauncher)而不是GUI启动器(CTKAppLauncherW),以便显示Python输出
 
这种实现方式允许开发者根据需要灵活选择启动器模式,特别是在调试过程中可以通过设置Slicer_BUILD_WIN32_CONSOLE_LAUNCHER=ON来启用控制台输出,而在正式发布版本中使用GUI启动器提供更干净的用户体验。
