CPackComponent

为二进制安装程序和源代码包配置组件。

简介

此模块由 CPack 自动包含。

CPack 生成的某些二进制安装程序(尤其是图形安装程序)允许用户选择要安装的单个应用程序组件。此模块允许开发人员配置此类组件的打包。

内容通过 CMake 的 install() 命令的 COMPONENT 参数分配给组件。组件可以使用下面描述的命令用友好的名称和描述、组件间依赖项等进行注释,并以各种方式分组,以自定义生成的安装程序。

要为不同的 CPack 生成器指定不同的分组,请使用 CPACK_PROJECT_CONFIG_FILE。

变量

以下变量影响组件特定的打包

CPACK_COMPONENTS_ALL

要安装的组件列表。

此变量的默认值由 CPack 计算,包含项目定义的所有组件。用户可以将其设置为仅包含指定的组件。

除了指定所有所需的组件外,还可以获取所有定义的组件的列表,然后从列表中删除不需要的组件。可以使用 get_cmake_property() 命令获取 COMPONENTS 属性,然后可以使用 list(REMOVE_ITEM) 命令删除不需要的组件。例如,要使用除 foobar 之外的所有定义的组件

get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS)
list(REMOVE_ITEM CPACK_COMPONENTS_ALL "foo" "bar")
CPACK_<GENNAME>_COMPONENT_INSTALL

为 CPack 生成器 <GENNAME> 启用/禁用组件安装。

每个 CPack 生成器(RPM、DEB、ARCHIVE、NSIS、DMG 等)都有一个传统的默认行为。例如,RPM 构建单片,而 NSIS 构建组件。可以通过将此变量设置为 0/1 或 OFF/ON 来更改默认行为。

CPACK_COMPONENTS_GROUPING

指定如何为支持组件的多包 CPack 生成器对组件进行分组。

当存在组件时,某些生成器(如 RPM 或 ARCHIVE(TGZ、ZIP 等))可能会生成多个包文件,具体取决于此变量的值

  • ONE_PER_GROUP(默认):为每个组件组创建一个包

  • IGNORE:为每个组件创建一个包(忽略组)

  • ALL_COMPONENTS_IN_ONE:创建一个包含所有请求组件的单个包

CPACK_COMPONENT_<compName>_DISPLAY_NAME

要显示的组件名称。

CPACK_COMPONENT_<compName>_DESCRIPTION

组件的描述。

CPACK_COMPONENT_<compName>_GROUP

组件所属的组。

CPACK_COMPONENT_<compName>_DEPENDS

此组件依赖的组件(组件列表)。

CPACK_COMPONENT_<compName>_HIDDEN

如果此组件对用户隐藏,则为真。

CPACK_COMPONENT_<compName>_REQUIRED

如果此组件是必需的,则为真。

CPACK_COMPONENT_<compName>_DISABLED

如果此组件默认情况下未被选中要安装,则为真。

命令

添加组件

cpack_add_component

描述一个安装组件。

cpack_add_component(compname
                    [DISPLAY_NAME name]
                    [DESCRIPTION description]
                    [HIDDEN | REQUIRED | DISABLED ]
                    [GROUP group]
                    [DEPENDS comp1 comp2 ... ]
                    [INSTALL_TYPES type1 type2 ... ]
                    [DOWNLOADED]
                    [ARCHIVE_FILE filename]
                    [PLIST filename])

compname 是一个安装组件的名称,由一个或多个 CMake install() 命令的 COMPONENT 参数定义。使用 cpack_add_component 命令,可以设置安装组件的名称、描述和其他属性。还可以将组件分配给组件组。

DISPLAY_NAME 是组件的显示名称,用于在图形安装程序中显示组件名称。此值可以是任何字符串。

DESCRIPTION 是组件的扩展描述,用于在图形安装程序中向用户提供有关组件的附加信息。可以使用 \n 作为行分隔符,使描述跨越多行。通常,这些描述不应超过几行。

HIDDEN 指示此组件将在图形安装程序中隐藏,因此用户无法直接更改是否安装它。

REQUIRED 指示此组件是必需的,因此将始终安装。它将在图形安装程序中可见,但不能取消选择。(通常,必需的组件将显示为灰色)。

DISABLED 指示此组件应默认情况下禁用(取消选择)。用户可以自由选择安装此组件,除非它也被隐藏。

DEPENDS 列出此组件依赖的组件。如果选择此组件,则必须选择列出的每个组件。依赖项信息在安装程序本身中编码,因此用户无法安装不一致的组件集。

GROUP 指定此组件所属的组件组。如果未提供,该组件将是一个独立的组件,不属于任何组件组。组件组使用 cpack_add_component_group 命令进行描述,如下所述。

INSTALL_TYPES 列出此组件所属的安装类型。当选择其中一种安装类型时,此组件将自动被选中。安装类型使用 cpack_add_install_type 命令进行描述,如下所述。

DOWNLOADED 指示此组件应通过安装程序动态下载,而不是打包到安装程序本身中。有关更多信息,请参阅 cpack_configure_downloads 命令。

ARCHIVE_FILE 为 CPack 创建的用于下载组件的存档文件提供名称。如果未提供,CPack 将根据 CPACK_PACKAGE_FILE_NAME 和组件名称创建具有某些名称的文件。有关更多信息,请参阅 cpack_configure_downloads。

PLIST 给出一个文件名,该文件名与 --component-plist 参数一起传递给 pkgbuild,当使用 productbuild 生成器时。

添加组件组

cpack_add_component_group

描述一组相关的 CPack 安装组件。

cpack_add_component_group(groupname
                         [DISPLAY_NAME name]
                         [DESCRIPTION description]
                         [PARENT_GROUP parent]
                         [EXPANDED]
                         [BOLD_TITLE])

cpack_add_component_group 描述了一组安装组件,这些组件将在选项列表中一起放置。通常,组件组允许用户通过单个组级选项选择/取消选择一个组中的所有组件。使用组件组来减少具有许多选项的安装程序的复杂性。groupname 是用于在 cpack_add_component 命令的 GROUP 参数中标识该组的任意名称,该参数用于将组件放置在该组中。组的名称不得与任何组件的名称冲突。

DISPLAY_NAME 是组件组的显示名称,用于在图形安装程序中显示组件组名称。此值可以是任何字符串。

DESCRIPTION 是组件组的扩展描述,用于在图形安装程序中向用户提供有关该组中组件的附加信息。可以使用 \n 作为行分隔符,使描述跨越多行。通常,这些描述不应超过几行。

PARENT_GROUP,如果提供,则命名该组的父组。父组用于建立组的层次结构,提供组的任意层次结构。

EXPANDED 指示默认情况下,该组应显示为“已展开”,以便用户立即看到该组中的所有组件。否则,该组将最初显示为单个条目。

BOLD_TITLE 指示组标题应以粗体显示,以引起用户对该组的注意。

添加安装类型

cpack_add_install_type

在图形安装程序中添加一个新的安装类型,其中包含一组预定义的组件选择。

cpack_add_install_type(typename
                       [DISPLAY_NAME name])

cpack_add_install_type 命令标识一组预选组件,这些组件代表应用程序的常见用例。例如,“开发者”安装类型可能包含应用程序及其头文件和库文件,而“最终用户”安装类型可能只包含应用程序的可执行文件。每个组件都通过 cpack_add_component 的 INSTALL_TYPES 参数标识自己与一个或多个安装类型。

DISPLAY_NAME 是安装类型的显示名称,它通常会在图形安装程序中的下拉框中显示。此值可以是任何字符串。

配置下载

cpack_configure_downloads

配置 CPack 以在安装过程中的动态下载选定的组件。

cpack_configure_downloads(site
                          [UPLOAD_DIRECTORY dirname]
                          [ALL]
                          [ADD_REMOVE|NO_ADD_REMOVE])

cpack_configure_downloads 命令配置所选组件的安装时下载。对于每个可下载组件,CPack 将创建一个包含该组件内容的存档,该存档应该上传到给定的网站。当用户选择该组件进行安装时,安装程序将下载并提取该组件。此功能对于创建只下载请求组件的小型安装程序非常有用,节省带宽。此外,安装程序足够小,因此将作为正常安装过程的一部分进行安装,“更改”按钮在 Windows 添加/删除程序控制面板中将允许在原始安装后添加或删除应用程序的某些部分。在 Windows 上,下载组件功能需要 NSIS 的 ZipDLL 插件,可从以下网站获得

http://nsis.sourceforge.net/ZipDLL_plug-in

在 macOS 上,动态下载组件的安装程序只能在使用 macOS 10.5 或更高版本的系统上构建和安装。

site 参数是可下载组件的存档将驻留的 URL,例如,https://cmake.com.cn/files/v3.25/ CPack 生成的所有存档都应上传到该位置。

UPLOAD_DIRECTORY 是 CPack 将为每个组件创建各种存档的本地目录。该目录的内容应上传到 site 参数中给出的 URL 可访问的位置。如果省略,CPack 将使用 CMake 二进制目录中的 CPackUploads 目录来存储生成的存档。

ALL 标志表示下载所有组件。否则,只有那些明确标记为 DOWNLOADED 或具有指定 ARCHIVE_FILE 的组件才会被下载。此外,ALL 选项意味着 ADD_REMOVE(除非指定了 NO_ADD_REMOVE)。

ADD_REMOVE 表示 CPack 应该安装一个可以从 Windows 的添加/删除程序对话框(通过“修改”按钮)调用以更改已安装组件集的安装程序副本。NO_ADD_REMOVE 关闭此行为。此选项在 Mac OS X 上被忽略。