使用CPACK自定义NSIS安装程序

时间:2014-01-15 17:48:24

标签: cmake nsis cpack

我正在尝试使用CMAKE和CPACK自定义NSIS安装程序。 特别是我想在生成的project.nsi中包含一个外部脚本。

类似的东西:

!include "@SCRIPT_PATH@\@SCRIPT_NAME@.nsh"

为此,我按照此处显示的示例进行操作:http://www.cmake.org/Wiki/CMake:CPackNSISAdvancedTips

我复制了模板脚本文件(NSIS.template.in)并添加了所需的命令。 我现在需要相应地配置两个变量“@ SCRIPT_PATH @和@ SCRIPT_NAME @。

我尝试将它们设置为标准CMAKE变量

SET(SCRIPT_PATH "somePath")
SET(SCRIPT_NAME "someName")

但模板变量只是由CPACK

留空

有任何线索吗?

1 个答案:

答案 0 :(得分:0)

我找到了一个有效的解决方案。

首先在主要NSIS.template.in中添加占位符,例如:

@NSIS_ADDITIONAL_SCRIPT@

然后,您需要配置一个模板文件,其中包含将传递给CPACK构建的选项。

CPackOptions.cmake包含以下内容:

SET(NSIS_ADDITIONAL_SCRIPT ${NSIS_ADDITIONAL_SCRIPT})

然后在包含CPACK之前的CMAKE脚本中,您需要设置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指令