1

我正在尝试使用 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 简单地留空

有什么线索吗?

4

1 回答 1

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 指令
于 2014-01-29T16:14:27.790 回答