CPack:如何执行多个 CPACK_NSIS_EXTRA_INSTALL_COMMANDS?

Posted

技术标签:

【中文标题】CPack:如何执行多个 CPACK_NSIS_EXTRA_INSTALL_COMMANDS?【英文标题】:CPack: How to perform multiple CPACK_NSIS_EXTRA_INSTALL_COMMANDS? 【发布时间】:2015-07-03 09:18:50 【问题描述】:

我正在使用 CMake 2.8.11.2、CPack 和 NSIS 编写安装程序。我到了需要调用 MSVCR 等包含子安装程序的地步。这是我的 CMakeLists.txt 的样子:

set(CPACK_GENERATOR NSIS)
list ( APPEND CPACK_NSIS_EXTRA_INSTALL_COMMANDS " ExecWait ./tmp/vcredist_x64.exe")
list ( APPEND CPACK_NSIS_EXTRA_INSTALL_COMMANDS " ExecWait ./tmp/some-other-installer.exe")
list ( APPEND CPACK_NSIS_EXTRA_INSTALL_COMMANDS " RMDir /r ./tmp/")
INCLUDE(CPack)

但是,生成的 .nsi 文件包含以下(单)行

ExecWait ./tmp/vcredist_x64.exe; ExecWait ./tmp/some-other-installer.exe; RMDir /r ./tmp/

在生成包时导致错误“ExecWait 需要 1-2 个参数,得到 6 个”。

如何正确地将多个额外的命令传递给 NSIS?

【问题讨论】:

【参考方案1】:

要添加多个命令,CPACK_NSIS_EXTRA_INSTALL_COMMANDS 需要设置为多行字符串:

list ( APPEND CPACK_NSIS_EXTRA_INSTALL_COMMANDS ...
...
string (REPLACE ";" "\n" CPACK_NSIS_EXTRA_INSTALL_COMMANDS "$CPACK_NSIS_EXTRA_INSTALL_COMMANDS")
include(CPack)

【讨论】:

谢谢,解决了。

以上是关于CPack:如何执行多个 CPACK_NSIS_EXTRA_INSTALL_COMMANDS?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改使用 CPack 安装的可执行文件的名称?

CPack 一次构建多个包的问题

cpack:如何在安装过程中将程序与文件扩展名关联?

CPack 尝试构建所有目标

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

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