如何通过CPack、CMake和NSIS启用安装程序语言选择功能?
在CPack+NSIS安装程序中添加语言选择对话框
由于CPack的NSIS生成器没有直接启用语言选择的配置项,我们需要手动将NSIS Modern UI的MUI_LANGDLL_DISPLAY宏注入到生成的安装脚本的.onInit函数中,具体步骤如下:
1. 配置安装程序支持的语言
首先在CMakeLists.txt中指定安装程序需要支持的语言列表(按需调整):
set(CPACK_NSIS_PACKAGE_LANGUAGES "en-US,zh-CN,ja-JP")
2. 注入语言选择宏
有两种简洁的方式实现:
方式一:直接通过CMake变量插入代码
在CMakeLists.txt中添加以下配置,将宏代码直接追加到NSIS的.onInit函数中:
set(CPACK_NSIS_EXTRA_INIT_COMMANDS "!insertmacro MUI_LANGDLL_DISPLAY")
方式二:通过自定义NSIS脚本文件(适合复杂逻辑)
如果需要自定义语言选择的细节(比如设置默认语言、添加选择后的回调),可以创建一个单独的NSIS脚本文件(例如LangDllInit.nsh),内容示例:
# 设置默认语言为英文,用户可选择其他配置的语言 !insertmacro MUI_LANGDLL_DISPLAY "en-US" "" "1"
然后在CMakeLists.txt中指定该脚本作为初始化前的注入内容:
set(CPACK_NSIS_PRE_INIT_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/LangDllInit.nsh")
3. 生成安装程序
完成上述配置后,正常执行cpack命令生成安装程序,启动时就会弹出语言选择对话框。
注:CPack生成的NSIS脚本默认已经引入了Modern UI(
!include "MUI2.nsh"),因此无需额外添加宏依赖。
内容的提问来源于stack exchange,提问作者Taiguara Tupinambás
相关产品推荐
相关产品推荐

