使用 CPACK 自定义 NSIS 安装程序
Posted
技术标签:
【中文标题】使用 CPACK 自定义 NSIS 安装程序【英文标题】:Customizing NSIS installer using CPACK 【发布时间】:2014-01-15 17:48:24 【问题描述】:我正在尝试使用 CMAKE 和 CPACK 自定义 NSIS 安装程序。 特别是我想在生成的 project.nsi 中包含一个外部脚本。
类似:
!include "@SCRIPT_PATH@\@SCRIPT_NAME@.nsh"
为此,我遵循此处显示的示例:https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/NSISAdvancedTips
我已复制模板脚本文件 (NSIS.template.in) 并添加了所需的命令。 我现在需要相应地配置两个变量“@SCRIPT_PATH@ 和 @SCRIPT_NAME@。
我尝试将它们设置为标准 CMAKE 变量
SET(SCRIPT_PATH "somePath")
SET(SCRIPT_NAME "someName")
但是模板变量被 CPACK 简单地留空
有什么线索吗?
【问题讨论】:
【参考方案1】:我找到了一个可行的解决方案。
首先在主 NSIS.template.in 中添加一个占位符,以便在其中插入新命令,例如:
@NSIS_ADDITIONAL_SCRIPT@
然后您需要配置一个模板文件,其中包含将传递给 CPACK 构建的选项。
CPackOptions.cmake 包含以下内容:
SET(NSIS_ADDITIONAL_SCRIPT $NSIS_ADDITIONAL_SCRIPT)
然后在您的 CMAKE 脚本中,在包含 CPACK 之前,您需要设置 NSIS_ADDITIONAL_SCRIPT 变量(为了在窗口系统上具有正确的反斜杠集,路径被重新设计)
SET(scriptPath "[path to the script location]" )
FILE(TO_NATIVE_PATH $scriptPath scriptPath )
STRING(REPLACE "\\" "\\\\" scriptPath $scriptPath )
最后配置 CPackOption.cmake 文件(注意斜线和逗号的正确数量)
SET(NSIS_ADDITIONAL_SCRIPT " \"!include \\\"$scriptPath\\\" \\n \" ")
CONFIGURE_FILE( $CMAKE_SOURCE_DIR/CMakeConf/CPackOptions.cmake $PROJECT_BINARY_DIR/CPackOptions.cmake)
如果你做的一切都正确:
通过配置和生成 CMAKE 脚本,您将在项目构建文件夹中找到文件 CPackOptions.cmake。 CPACK 将使用此配置文件来填充添加到 NSIStemplate.in 中的变量。 最终生成的 project.nsi 将包含额外的 !include 指令【讨论】:
这适用于 cmake 3.20 吗?我试过了,但是 template.in 文件中的变量将被删除并保持空白以上是关于使用 CPACK 自定义 NSIS 安装程序的主要内容,如果未能解决你的问题,请参考以下文章
如何在重新安装期间显示带有 CPack NSIS 的卸载程序窗口?