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 将使用一个文件进行演示。如果您希望安装程序完全忽略许可证文件,则可以启用此选项。- 强制性:
是
- 默认:
OFF
- 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¶
此变量应包含
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")
- 强制性:
否
- 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")
- 强制性:
否
- CPACK_INNOSETUP_CREATE_UNINSTALL_LINK¶
如果启用此选项,应用程序卸载程序的快捷方式将自动添加到开始菜单文件夹。
- 强制性:
是
- 默认:
OFF
- 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 脚本即可。代码文件包含在输出脚本的最底部。
- 强制性:
否