CPack Inno Setup 生成器¶
在 3.27 版本中新增。
Inno Setup 是 Jordan Russell 和 Martijn Laan 开发的免费 Windows 程序安装程序(https://jrsoftware.org/isinfo.php)。
本文档解释了 Inno Setup 生成器特定的选项。
该生成器提供了许多选项,例如组件。不幸的是,并非所有功能(例如组件依赖项)目前都受 Inno Setup 支持,并且该生成器目前会忽略它们。
CPack 要求 Inno Setup 6 或更高版本。
3.30 版本新增: 该生成器现在可以在非 Windows 主机上使用,但需要 Wine 来运行 Inno Setup 工具。
CPack Inno Setup 生成器特定变量¶
您可以使用以下变量来更改 CPack INNOSETUP 生成器的行为。
常规¶
Inno Setup 生成器正常工作不需要设置以下任何变量。如果下方标记为强制的变量未设置,则会取其默认值。
变量还可以包含 Inno Setup 常量,例如 {app}。有关更多信息,请参阅 Inno Setup 的文档。
如果您被要求提供任何文件的路径,您可以始终提供绝对路径,或者在大多数情况下提供相对于顶级目录的相对路径,其中包含由 install() 指令安装的所有文件。
CPack 会尝试为您转义引号和其他特殊字符。但是,使用特殊字符可能会导致问题。
以下变量简化了 CMake 中 Inno Setup 的使用。
- CPACK_INNOSETUP_USE_CMAKE_BOOL_FORMAT¶
Inno Setup 仅使用
yes或no作为布尔格式,而 CMake 使用许多替代格式,例如ON或OFF。启用此选项可实现自动转换。考虑以下示例
set(CMAKE_INNOSETUP_SETUP_AllowNoIcons OFF)
如果启用此选项,则将在输出脚本中创建以下行:
AllowNoIcons=no。否则,将创建以下错误的行:AllowNoIcons=OFF转换在每个 Inno Setup 特定变量中都已启用。
- 强制项:
是
- 默认值:
ON
安装特定变量¶
- CPACK_INNOSETUP_ARCHITECTURE¶
是
x86、x64、arm64或ia64之一。此变量指定安装程序的目標架构。这也会影响使用的“Program Files”文件夹或注册表项。CPack 尝试通过尝试编译来确定正确的值(请参阅
CMAKE_SIZEOF_VOID_P),但也可以手动指定此选项(尤其是在使用ia64或跨平台编译时)。- 强制项:
是
- 默认值:
根据尝试编译的结果,为
x86或x64
- CPACK_INNOSETUP_INSTALL_ROOT¶
如果您不希望安装程序在“Program Files”下创建安装目录,则必须在此处指定安装根目录。
完整的安装目录将是:
${CPACK_INNOSETUP_INSTALL_ROOT}/${CPACK_PACKAGE_INSTALL_DIRECTORY}。- 强制项:
是
- 默认值:
{autopf}
- CPACK_INNOSETUP_ALLOW_CUSTOM_DIRECTORY¶
如果启用,安装程序将允许用户通过提供额外的向导页面来更改安装目录。
- 强制项:
是
- 默认值:
ON
- CPACK_INNOSETUP_PROGRAM_MENU_FOLDER¶
创建的开始菜单文件夹的初始名称。
如果此变量设置为
.,则不会创建单独的文件夹,应用程序快捷方式将出现在顶级开始菜单文件夹中。- 强制项:
是
- 默认值:
- CPACK_INNOSETUP_LANGUAGES¶
您希望 Inno Setup 包含的语言的 分号分隔列表。
当前可用:
armenian、brazilianPortuguese、bulgarian、catalan、corsican、czech、danish、dutch、english、finnish、french、german、hebrew、icelandic、italian、japanese、norwegian、polish、portuguese、russian、slovak、slovenian、spanish、turkish和ukrainian。此列表可能因 Inno Setup 版本而异。- 强制项:
是
- 默认值:
english
- CPACK_INNOSETUP_IGNORE_LICENSE_PAGE¶
如果您不使用
CPACK_RESOURCE_FILE_LICENSE指定许可文件,CPack 会使用一个演示文件。如果您希望安装程序完全忽略许可文件,可以启用此选项。- 强制项:
是
- 默认值:
关闭
- CPACK_INNOSETUP_IGNORE_README_PAGE¶
如果您不使用
CPACK_RESOURCE_FILE_README指定自述文件,CPack 会使用一个演示文件。如果您希望安装程序完全忽略自述文件,可以启用此选项。确保在使用自定义自述文件时禁用此选项。- 强制项:
是
- 默认值:
ON
- CPACK_INNOSETUP_PASSWORD¶
使用给定密码启用密码保护和文件加密。
- 强制项:
否
- CPACK_INNOSETUP_USE_MODERN_WIZARD¶
启用 Inno Setup 提供的现代外观和感觉。如果此选项关闭,则使用经典样式。图像和图标文件也会受到影响。
- 强制项:
是
- 默认值:
由于兼容性原因,为
OFF
- CPACK_INNOSETUP_ICON_FILE¶
自定义安装程序
.ico文件的路径。使用
CPACK_PACKAGE_ICON来自定义在向导中显示的位图文件。- 强制项:
否
- CPACK_INNOSETUP_SETUP_<directive>¶
此组允许调整 Inno Setup 提供的
[Setup]部分的所有指令,其中directive是其名称。以下是一些示例
set(CPACK_INNOSETUP_SETUP_WizardSmallImageFile "my_bitmap.bmp") set(CPACK_INNOSETUP_SETUP_AllowNoIcons OFF) # This requires CPACK_INNOSETUP_USE_CMAKE_BOOL_FORMAT to be on
所有这些变量的优先级都高于其他变量。请考虑以下示例:
set(CPACK_INNOSETUP_SETUP_Password "admin") set(CPACK_INNOSETUP_PASSWORD "secret")
最终密码将是
admin,因为CPACK_INNOSETUP_PASSWORD的优先级低于CPACK_INNOSETUP_SETUP_Password。- 强制项:
否
文件特定变量¶
虽然由 install() 指令安装的所有文件都会被自动处理并添加到安装程序中,但有一些变量可以自定义安装过程。
在快捷方式(例如 CPACK_CREATE_DESKTOP_LINKS)或 [Run] 条目中使用可执行文件(仅限 .exe 或 .com)之前,您必须将原始文件名(不带路径和扩展名)添加到 CPACK_PACKAGE_EXECUTABLES 中,并为它们创建开始菜单快捷方式。
如果您有两个具有相同原始名称的文件(例如 a/executable.exe 和 b/executable.com),该部分中的条目将被创建两次。这将导致未定义行为,不推荐这样做。
- CPACK_INNOSETUP_CUSTOM_INSTALL_INSTRUCTIONS¶
此变量应包含
路径、指令对的 分号分隔列表,可用于自定义为每个文件或目录自动创建的安装命令。CPack 为每个文件创建以下 Inno Setup 指令...
Source: "absolute\path\to\my_file.txt"; DestDir: "{app}"; Flags: ignoreversion...以及为每个目录创建以下行
Name: "{app}\my_folder"您可能希望更改
my_file.txt的目标目录或标志。由于我们还可以提供相对路径,因此您想要的行是以下内容:Source: "my_file.txt"; DestDir: "{userdocs}"; Flags: ignoreversion uninsneveruninstall您可以通过将
my_file.txt用作路径,将Source: "my_file.txt"; DestDir: "{userdocs}"; Flags: ignoreversion uninsneveruninstall用作指令来实现此目的。您必须处理 转义问题。因此 CMake 命令将是:
set(CPACK_INNOSETUP_CUSTOM_INSTALL_INSTRUCTIONS "my_file.txt;Source: \\\"my_file.txt\\\"\\; DestDir: \\\"{userdocs}\\\"\\; Flags: ignoreversion uninsneveruninstall")
为了提高可读性,您应该通过使用
CPACK_VERBATIM_VARIABLES或将指令放入单独的 CPack 项目配置文件中来解决转义问题。如果您自定义了特定文件的安装指令,您将失去与其组件的联系。为避免这种情况,请手动添加
Components: <component>。您还需要在自定义部分中自行添加其快捷方式和[Run]条目,因为可执行文件将不再被CPACK_PACKAGE_EXECUTABLES找到。这是另一个例子(注意:为了让示例生效,您必须解决转义问题)
set(CPACK_INNOSETUP_CUSTOM_INSTALL_INSTRUCTIONS "component1/my_folder" "Name: \"{userdocs}\\my_folder\"\; Components: component1" "component2/my_folder2/my_file.txt" "Source: \"component2\\my_folder2\\my_file.txt\"\; DestDir: \"{app}\\my_folder2\\my_file.txt\"\; Flags: ignoreversion uninsneveruninstall\; Components: component2")
- 强制项:
否
- CPACK_INNOSETUP_MENU_LINKS¶
此变量应包含
链接、链接 名称对的 分号分隔列表,可用于在开始菜单文件夹中添加除可执行文件快捷方式(请参阅CPACK_PACKAGE_EXECUTABLES)之外的其他快捷方式。其中链接 名称是标签,链接可以是 URL 或相对于安装目录的路径。这是一个例子
set(CPACK_INNOSETUP_MENU_LINKS "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/cmake.html" "CMake Help" "https://cmake.com.cn" "CMake Web Site")
- 强制项:
否
- CPACK_INNOSETUP_CREATE_UNINSTALL_LINK¶
如果启用此选项,将自动在开始菜单文件夹中添加一个指向应用程序卸载程序的快捷方式。
- 强制项:
是
- 默认值:
关闭
- CPACK_INNOSETUP_RUN_EXECUTABLES¶
在
CPACK_PACKAGE_EXECUTABLES中指定的、用户可以在安装程序完成时运行的可执行文件的 分号分隔列表。它们会被内部添加到
[Run]部分。- 强制项:
否
组件特定变量¶
该生成器支持组件以及下载的组件。但是,组件的某些功能尚不支持(特别是组件依赖项)。目前会忽略这些变量。
出于技术原因,CPack 会更改 Inno Setup 中组件的名称,如果它有一个父组。如果您有组件 component 及其父组 group,请考虑在 Inno Setup 脚本中使用 group\component 作为组件名称。
以下是用于组件的其他变量:
- CPACK_INNOSETUP_<compName>_INSTALL_DIRECTORY¶
如果您不希望将组件
compName安装在{app}下,则必须在此处指定其安装目录。- 强制项:
否
- CPACK_INNOSETUP_VERIFY_DOWNLOADS¶
此选项仅影响下载的组件。
如果启用此选项,将在编译和下载时计算下载的存档的哈希值。只有在匹配时,安装程序才会继续。
- 强制项:
是
- 默认值:
ON
编译和脚本特定变量¶
- CPACK_INNOSETUP_EXECUTABLE¶
Inno Setup 脚本编译器命令的文件名。
- 强制项:
是
- 默认值:
ISCC
- CPACK_INNOSETUP_EXECUTABLE_ARGUMENTS¶
Inno Setup 脚本编译器命令的额外命令行选项的 分号分隔列表。
例如:
/Qp;/Smysigntool=$p请注意 转义问题。
- 强制项:
否
- CPACK_INNOSETUP_DEFINE_<macro>¶
此组允许将自定义定义指令作为命令行选项添加到 Inno Setup 预处理器命令。每个条目都模拟一个
#define public <macro>指令。其宏可从任何地方访问(public),因此也可在额外的脚本文件中使用。宏名称不得包含任何特殊字符。有关详细规则,请参阅 Inno Setup 预处理器文档。
考虑以下示例
# The following line emulates: #define public MyMacro "Hello, World!" set(CPACK_INNOSETUP_DEFINE_MyMacro "Hello, World!")
此时,您可以在任何地方使用
MyMacro。例如,在以下额外脚本中:AppComments={#emit "'My Macro' has the value: " + MyMacro}请注意 转义问题。
- 强制项:
否
- CPACK_INNOSETUP_EXTRA_SCRIPTS¶
要处理的其他
.iss脚本文件的路径的 分号分隔列表。它们会通过
#include指令在输出脚本文件的顶部被内部包含。您可以在文件中添加任何部分来扩展安装程序(例如,添加额外的任务或注册表项)。在扩展
[Setup]部分时,优先使用CPACK_INNOSETUP_SETUP_<directive>。- 强制项:
否
- CPACK_INNOSETUP_CODE_FILES¶
要处理的其他 Pascal 文件的路径的 分号分隔列表。
此变量实际上与
CPACK_INNOSETUP_EXTRA_SCRIPTS相同,只是您不必在文件顶部添加[Code]。切勿更改代码文件中的当前部分。这会导致未定义行为!将它们视为普通 Pascal 脚本。代码文件包含在输出脚本的最后。
- 强制项:
否