【问题标题】:Customizing NSIS installer using CPACK使用 CPACK 自定义 NSIS 安装程序
【发布时间】: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 简单地留空

有什么线索吗?

【问题讨论】:

    标签: cmake nsis 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 文件中的变量将被删除并保持空白
    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 2012-10-20
    • 2012-10-05
    • 2021-06-18
    • 2013-10-22
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多