CPack Inno Setup 生成器¶
在 3.27 版本中新增。
Inno Setup 是 Jordan Russell 和 Martijn Laan(https://jrsoftware.org/isinfo.php)开发的用于 Windows 程序的免费安装程序。
本文档解释 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
Setup 专用变量¶
- CPACK_INNOSETUP_ARCHITECTURE¶
使用
x86
、x64
、arm64
或ia64
中的一种。此变量指定安装程序的目标架构。它还会影响使用的程序文件文件夹或注册表项。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 会使用一个文件作为演示目的。如果您希望安装程序完全忽略许可文件,可以使用此选项。- 强制:
是
- 默认:
OFF
- CPACK_INNOSETUP_IGNORE_README_PAGE¶
如果您未使用
CPACK_RESOURCE_FILE_README
指定自述文件,CPack 会使用一个文件作为演示目的。如果您希望安装程序完全忽略自述文件,可以使用此选项。使用自定义自述文件时,确保禁用此选项。- 强制:
是
- 默认:
ON
- CPACK_INNOSETUP_PASSWORD¶
使用指定密码启用密码保护和文件加密。
- 强制:
No
- CPACK_INNOSETUP_USE_MODERN_WIZARD¶
启用 Inno Setup 提供的现代外观。如果此选项关闭,则会使用经典样式。也会影响图像和图标文件。
- 强制:
是
- 默认:
OFF
出于兼容性原因
- CPACK_INNOSETUP_ICON_FILE¶
指向自定义安装程序
.ico
文件的路径。使用
CPACK_PACKAGE_ICON
自定义向导中显示的位图文件。- 强制:
No
- 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
。- 强制:
No
文件特定变量¶
尽管通过 install()
指令安装的所有文件都会自动处理并添加到安装程序,但有一些变量用于自定义安装流程。
在快捷方式(例如 CPACK_CREATE_DESKTOP_LINKS
)或 [Run]
项中使用可执行文件(仅 .exe
或 .com
)之前,必须将原始文件名(不带路径和扩展名)添加到 CPACK_PACKAGE_EXECUTABLES
并为其创建开始菜单快捷方式。
如果两个文件具有相同的原始名称(例如 a/executable.exe
和 b/executable.com
),则部分中会创建两个该项。这将导致行为未定义,因此不建议这样做。
- CPACK_INNOSETUP_CUSTOM_INSTALL_INSTRUCTIONS¶
此变量应包含对
path
、instruction
对的分号分隔列表,可用于自定义自动为每个文件或目录创建的安装命令。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
作为path
,并使用Source: "my_file.txt"; DestDir: "{userdocs}"; Flags: ignoreversion uninsneveruninstall
作为instruction
。您要解决 转义问题。因此,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")
- 强制:
No
- CPACK_INNOSETUP_MENU_LINKS¶
此变量应包含 分号分隔列表 的对
link
,link name
,并可用于在可执行文件的开始菜单文件夹中添加快捷方式(参见CPACK_PACKAGE_EXECUTABLES
)。虽然link name
是标签,link
可以是 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")
- 强制:
No
- CPACK_INNOSETUP_CREATE_UNINSTALL_LINK¶
如果启用此选项,会自动将指向应用程序卸载程序的快捷方式添加到开始菜单文件夹。
- 强制:
是
- 默认:
OFF
- CPACK_INNOSETUP_RUN_EXECUTABLES¶
安装程序完成后用户可以运行的 分号分隔列表 中指定的
CPACK_PACKAGE_EXECUTABLES
中的可执行文件。它们内部添加到
[Run]
部分。- 强制:
No
特定于组件的变量¶
该生成器支持组件和下载的组件。但是,有一些组件特性尚不支持(尤其是组件依赖关系)。这些变量目前被忽略。
基于技术原因,如果 CPack 组件在 Inno Setup 中有父组,则它的名称将发生更改。如果您有组件 component
及其父组 group
,请考虑在 Inno Setup 脚本中使用 group\component
作为组件名称。
以下是组件的一些其他变量
- CPACK_INNOSETUP_<compName>_INSTALL_DIRECTORY¶
如果你不希望
compName
组件安装在{app}
下,你必须在此处指定其安装目录。- 强制:
No
- CPACK_INNOSETUP_VERIFY_DOWNLOADS¶
此选项仅影响已下载的组件。
如果启用此选项,将在编译和下载期间计算已下载归档的哈希值。仅当哈希值匹配时,安装程序才会继续进行。
- 强制:
是
- 默认:
ON
特定于编译和脚本的变量¶
- CPACK_INNOSETUP_EXECUTABLE¶
Inno Setup 脚本编译器命令的文件名。
- 强制:
是
- 默认:
ISCC
- CPACK_INNOSETUP_EXECUTABLE_ARGUMENTS¶
一个 用分号分隔的列表,其中包含 Inno Setup 脚本编译器命令的额外命令行选项。
例如:
/Qp;/Smysigntool=$p
注意 转义问题。
- 强制:
No
- 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}
注意 转义问题。
- 强制:
No
- CPACK_INNOSETUP_EXTRA_SCRIPTS¶
一个 用分号分隔的列表,其中包含要处理的其他
.iss
脚本文件的路径。它们在输出脚本文件的顶部使用
#include
指令进行内部包含。你可以在文件中添加任何部分来扩展安装程序(例如添加其他任务或注册表项)。在扩展
[Setup]
章节时,最好使用CPACK_INNOSETUP_SETUP_<directive>
。- 强制:
No
- CPACK_INNOSETUP_CODE_FILES¶
用分号分隔的列表,包含要处理的其他 Pascal 文件的路径。
此变量实际上与
CPACK_INNOSETUP_EXTRA_SCRIPTS
相同,除了不必在文件顶部添加[Code]
。切勿更改代码文件中的当前部分。这样会导致行为未定义!相反,将它们视为正常的 Pascal 脚本。代码文件包含在输出脚本的最底部。
- 强制:
No