在 CMake 中包含 NSIS 脚本

Posted

技术标签:

【中文标题】在 CMake 中包含 NSIS 脚本【英文标题】:Including NSIS script in CMake 【发布时间】:2017-06-08 16:29:55 【问题描述】:

是否可以包含来自 CMake 的 NSIS 脚本,该脚本将 CPack 与 NSIS 一起使用?看来我仅限于几个命令 (doc),但一些命令表明有一种方法可以包含整个 NSIS 脚本,特别是:

CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS,
CPACK_NSIS_EXTRA_INSTALL_COMMANDS,
CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS

但是,当我尝试调用这些命令时:

SET(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "!include extra_preinstall.nsh")

什么都没有发生。 (排除/NONFATAL会报错,所以推测找不到脚本。)

检查基本功能:

SET(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "MessageBox MB_OK \\\"Hello world!\\\"")

对安装程序不做任何事情。

为什么没有出现 Hello World 按钮?为什么找不到脚本文件(即使我把它放在 CMake hiearchy 的每一层)?

【问题讨论】:

几年前我刚刚修改了 CMake 附带的 NSIS 脚本,以添加我需要的功能。 我对此进行了调查,这证实了我的感觉,即必须有一种方法可以包含外部 NSIS 脚本。 我将替换 NSIS 脚本命名为 NSIS.template.in 并将其放入通过命令 list(APPEND CMAKE_MODULE_PATH $PROJECT_SOURCE_DIR/CMake/External/Modules) 添加的本地模块文件夹中 @drescherjm 我解决这个问题的方式略有不同。不管怎么说,还是要谢谢你! :) 【参考方案1】:

预安装并不意味着它在安装部分之前执行,因此您实际上必须单击“安装”,然后执行命令。 安装和卸载也是如此。

至于包含外部脚本:包含绝对路径可以解决所有问题。如果绝对路径不可用,可以使用 CMake 工具轻松获取。

【讨论】:

以上是关于在 CMake 中包含 NSIS 脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CMake 项目中包含外部库

如何在我的 cmake 项目中包含另一个 cmake 项目的头文件?

在cmake的所有cpp文件中包含c ++标头[重复]

在 cmake c++ 项目中包含库的首选方法是啥?

如何在 CMake 中包含 boost::future?

InstallDirRegKey 的 CMake/CPack 命令