如何通过 CMake/CPack 在 NSIS 中设置向导图像?

Posted

技术标签:

【中文标题】如何通过 CMake/CPack 在 NSIS 中设置向导图像?【英文标题】:How to set wizard images in NSIS through CMake/CPack? 【发布时间】:2011-05-17 08:00:54 【问题描述】:

我看到没有用于更改 NSIS 中的向导图像的 CPACK_xxx 变量(如 CPACK_PACKAGE_ICON)。 所以我复制了 NSIS.template.in 并修改了它。我可以这样做:

!define MUI_WELCOMEFINISHPAGE_BITMAP "C:\work\project\img\wizardInstall.bmp" !define MUI_UNWELCOMEFINISHPAGE_BITMAP "C:\work\project\img\wizardUninstall.bmp"

它会起作用的。但是,源代码位于许多开发人员协作的存储库中,在其中保留绝对路径并不是一个好主意。 我试图找到某种方法来获取我的源路径,并以某种方式从该路径创建图像路径,但无济于事。

所以,如果有人知道我如何在 NSIS 中设置向导图像,或者将源目录(并从中创建路径)传递给我的模板文件,请告诉我。

【问题讨论】:

您可以尝试在运行cmake 时使用file 命令修改您的NSIS.template.in 文件。例如:file(APPEND NSIS.template.in !define FILEID $PROJECT_SOURCE_DIR/path/to/file !define) 我可以这样修改文件.. 或者更好的是,复制它然后附加到副本中。但是,定义将最终出现在脚本的底部,导致类似:MUI_WELCOMEFINISHPAGE_BITMAP 已定义(即使我已经取出了它的定义)......尽管即使它没有导致预处理错误,它仍然出现在 MUI 的 !insertmacro 之后。 【参考方案1】:

既然您已经在自定义 NSIS.template.in 文件,而且它可能是使用 CONFIGURE_FILE() 命令配置的模板,为什么不将以下内容放入您的 NSIS.template.in:

!define MUI_WELCOMEFINISHPAGE_BITMAP "@MY_CPACK_MUI_WELCOMEFINISHPAGE_BITMAP@"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "@MY_CPACK_MUI_UNWELCOMEFINISHPAGE_BITMAP@"

然后,在您设置其他 CPACK 变量的 CMakeLists.txt 文件中,添加如下内容:

SET(MY_CPACK_MUI_WELCOMEFINISHPAGE_BITMAP
    "$CMAKE_SOURCE_DIR)/path/to/wizardInstall.bmp")
SET(MY_CPACK_MUI_UNWELCOMEFINISHPAGE_BITMAP
    "$CMAKE_SOURCE_DIR)/path/to/wizardUninstall.bmp")

【讨论】:

谢谢。但似乎这些变量必须只有“CPACK”前缀。否则 CPack 会忽略它们,并且它们在 nsi 中将有一个空值。 路径定义不正确,见:cmake.org/pipermail/cmake/2008-June/022085.html【参考方案2】:

您无需编译整个 NSIS 即可使用/更改这些图像。

它们存在于每台安装了 NSIS 的机器上 $NSISDIR\Contrib\Graphics\Wizard\win.bmp

在您的 .nsi 脚本中使用 !define MUI_WELCOMEFINISHPAGE_BITMAP bmp_file 来更改它们。

【讨论】:

以上是关于如何通过 CMake/CPack 在 NSIS 中设置向导图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何为使用 CPack 创建的 deb 包创建桌面图标?

如何将所有3rdparty运行时依赖项包含在linux上的cmake / cpack生成的包中?

使用 CPack 打包时是不是需要 CMake 安装步骤?

CMake + CPack:安装整个目录(包括子文件夹)

CMake/CPack - 生成 Debian 包维护者脚本(特别是 postrm)

cmake/cpack 组件 debuginfo rpm 包没有出现