CMake

您所在的位置:网站首页 儿童竖笛怎么吹 CMake

CMake

2024-06-24 03:43:26| 来源: 网络整理| 查看: 265

install

指定在安装时运行的规则。

Synopsis install(TARGETS ... [...]) install(IMPORTED_RUNTIME_ARTIFACTS ... [...]) install({FILES | PROGRAMS} ... [...]) install(DIRECTORY ... [...]) install(SCRIPT [...]) install(CODE [...]) install(EXPORT [...]) install(RUNTIME_DEPENDENCY_SET [...]) Introduction

此命令生成项目的安装规则。通过调用源目录中的 install() 命令指定的安装规则在安装过程中按顺序执行。

在版本 3.14 中进行了更改:通过调用 add_subdirectory() 命令添加的子目录中的安装规则与父目录中的安装规则交错,以按照声明的顺序运行(请参阅策略 CMP0082 )。

在 version 3.22 中更改:环境变量 CMAKE_INSTALL_MODE 可以覆盖 install() 的默认复制行为。

该命令有多个签名。其中一些定义文件和目标的安装选项。此处介绍了多个签名所共有的选项,但它们仅对指定它们的签名有效。常见的选项有:

DESTINATION

指定磁盘上将安装文件的目录。参数可以是相对路径或绝对路径。

如果给出相对路径,则会相对于 CMAKE_INSTALL_PREFIX 变量的值进行解释。可以使用 CMAKE_INSTALL_PREFIX 变量文档中解释的 DESTDIR 机制在安装时重新定位前缀。

如果给出绝对路径(带有前导斜杠或驱动器号),则会逐字使用它。

由于 cpack 安装程序生成器不支持绝对路径,因此最好始终使用相对路径。特别是,不需要通过在前面添加 CMAKE_INSTALL_PREFIX 来使路径成为绝对路径;如果 DESTINATION 是相对路径,则默认使用此前缀。

PERMISSIONS

指定已安装文件的权限。有效权限为 OWNER_READ 、 OWNER_WRITE 、 OWNER_EXECUTE 、 GROUP_READ 、 GROUP_WRITE 、 GROUP_EXECUTE 、 WORLD_READ 、 WORLD_WRITE 、 WORLD_EXECUTE 、 SETUID 和 SETGID 。在某些平台上没有意义的权限将在这些平台上被忽略。

CONFIGURATIONS

指定应用安装规则的构建配置列表(调试、发布等)。请注意,为此选项指定的值仅适用于 CONFIGURATIONS 选项之后列出的选项。例如,要为调试和发布配置设置单独的安装路径,请执行以下操作:

install(TARGETS target CONFIGURATIONS Debug RUNTIME DESTINATION Debug/bin) install(TARGETS target CONFIGURATIONS Release RUNTIME DESTINATION Release/bin)

请注意, CONFIGURATIONS 出现在 RUNTIME DESTINATION 之前。

COMPONENT

指定与安装规则关联的安装组件名称,例如 Runtime 或 Development 。在特定于组件的安装期间,仅执行与给定组件名称关联的安装规则。在完整安装过程中,除非标有 EXCLUDE_FROM_ALL ,否则将安装所有组件。如果未提供 COMPONENT ,则会创建默认组件 "Unspecified" 。默认组件名称可以使用 CMAKE_INSTALL_DEFAULT_COMPONENT_NAME 变量控制。

EXCLUDE_FROM_ALL

3.6 版本中的新功能。

指定该文件从完整安装中排除,并且仅作为特定于组件的安装的一部分进行安装

RENAME

为已安装文件指定一个可能与原始文件不同的名称。仅当通过命令安装单个文件时才允许重命名。

OPTIONAL

指定要安装的文件不存在也不报错。

版本 3.1 中的新增功能:安装文件的命令签名可能会在安装过程中打印消息。使用 CMAKE_INSTALL_MESSAGE 变量控制打印哪些消息。

版本 3.11 中的新增功能:许多 install() 变体隐式创建包含已安装文件的目录。如果设置了 CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS ,则将使用指定的权限创建这些目录。否则,它们将根据类 Unix 平台上的 uname 规则创建。Windows 平台不受影响。

Installing Targets install(TARGETS targets... [EXPORT ] [RUNTIME_DEPENDENCIES args...|RUNTIME_DEPENDENCY_SET ] [[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE| PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE|FILE_SET |CXX_MODULES_BMI] [DESTINATION ] [PERMISSIONS permissions...] [CONFIGURATIONS [Debug|Release|...]] [COMPONENT ] [NAMELINK_COMPONENT ] [OPTIONAL] [EXCLUDE_FROM_ALL] [NAMELINK_ONLY|NAMELINK_SKIP] ] [...] [INCLUDES DESTINATION [ ...]] )

TARGETS 表单指定从项目安装目标的规则。可以安装以下几种目标 Output Artifacts :

ARCHIVE

此类目标工件包括:

Static libraries (除了在 macOS 上标记为 FRAMEWORK ,见下文); DLL 导入 libraries (在所有基于 Windows 的系统上,包括 Cygwin;它们具有扩展名 .lib ,与转到 RUNTIME 的 .dll libraries 相比); 在 AIX 上,为启用 ENABLE_EXPORTS 的可执行文件创建的链接器导入文件。 LIBRARY

此类目标工件包括:

共享库,除了

DLL(这些位于 RUNTIME ,见下文), 在 macOS 上标记为 FRAMEWORK (见下文)。 RUNTIME

此类目标工件包括:

可执行文件(除了在 macOS 上标记为 MACOSX_BUNDLE 时,请参阅下面的 BUNDLE ); DLL(在所有基于 Windows 的系统上,包括 Cygwin;请注意,随附的导入 libraries 属于 ARCHIVE 类型)。 OBJECTS

3.9 版本中的新功能。

与对象库关联的对象文件。

FRAMEWORK

static 和标有 FRAMEWORK 属性的共享 libraries 在 macOS 上均被视为 FRAMEWORK 目标。

BUNDLE

标有 MACOSX_BUNDLE 属性的可执行文件在 macOS 上被视为 BUNDLE 目标。

PUBLIC_HEADER

与 library 关联的任何 PUBLIC_HEADER 文件都安装在非 Apple 平台上 PUBLIC_HEADER 参数指定的目标中。对于 Apple 平台上的 FRAMEWORK libraries ,将忽略此参数定义的规则,因为关联的文件已安装到框架文件夹内的适当位置。有关详细信息,请参阅 PUBLIC_HEADER 。

PRIVATE_HEADER

与 PUBLIC_HEADER 类似,但适用于 PRIVATE_HEADER 文件。有关详细信息,请参阅 PRIVATE_HEADER 。

RESOURCE

与 PUBLIC_HEADER 和 PRIVATE_HEADER 类似,但适用于 RESOURCE 文件。有关详细信息,请参阅 RESOURCE 。

FILE_SET

3.23 版本中的新功能。

文件集由 target_sources(FILE_SET) 命令定义。如果文件集 存在并且是 PUBLIC 或 INTERFACE ,则该集中的所有文件都将安装在目标下(见下文)。保留相对于文件集基目录的目录结构。例如,添加到文件集中为 /blah/include/myproj/here.h 且基目录为 /blah/include 的文件将安装到目标下方的 myproj/here.h 中。

CXX_MODULES_BMI

Note

实验性的。由 CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API 门控

CXX_MODULES 类型文件集中来自 PUBLIC 源的 C++ 模块的任何模块文件都将安装到给定的 DESTINATION 。所有模块都直接放置在目标中,因为没有从模块名称派生出目录结构。空的 DESTINATION 可用于禁止安装这些文件(用于通用代码)。

对于给定的每个参数,它们后面的参数仅适用于参数中指定的目标或文件类型。如果给出 none ,则安装属性适用于所有目标类型。

对于常规可执行文件、 static libraries 和共享 libraries ,不需要 DESTINATION 参数。对于这些目标类型,当省略 DESTINATION 时,将从 GNUInstallDirs 中的相应变量获取默认目标,或者如果未定义该变量,则将其设置为内置默认值。文件集的 true 以及通过 PUBLIC_HEADER 和 PRIVATE_HEADER 目标属性与已安装目标关联的 public 和 private 标头也是如此。必须始终为模块 libraries 、Apple 捆绑包和框架提供目标。接口和对象 libraries 的目标可以省略,但它们的处理方式不同(请参阅本节末尾对此主题的讨论)。

对于 DLL 平台上的共享 libraries ,如果未指定 RUNTIME 和 ARCHIVE 目标,则 RUNTIME 和 ARCHIVE 组件都会安装到其默认目标。如果指定了 RUNTIME 或 ARCHIVE 目标,则该组件将安装到该目标,而不会安装另一个组件。如果同时指定了 RUNTIME 和 ARCHIVE 目标,则两个组件都会安装到其各自的目标。

下表显示了目标类型及其关联变量以及未给出目标时应用的内置默认值:

Target Type

GNUInstallDirs Variable

Built-In Default

RUNTIME

${CMAKE_INSTALL_BINDIR}

bin

LIBRARY

${CMAKE_INSTALL_LIBDIR}

lib

ARCHIVE

${CMAKE_INSTALL_LIBDIR}

lib

PRIVATE_HEADER

${CMAKE_INSTALL_INCLUDEDIR}

include

PUBLIC_HEADER

${CMAKE_INSTALL_INCLUDEDIR}

include

FILE_SET ( HEADERS 型)

${CMAKE_INSTALL_INCLUDEDIR}

include

希望遵循将标头安装到特定于项目的子目录的常见做法的项目可能更喜欢使用具有适当路径和基目录的文件集。否则,他们必须提供 DESTINATION ,而不能依赖上述内容(请参阅下面的下一个示例)。

为了使包符合分发文件系统布局策略,如果项目必须指定 DESTINATION ,建议它们使用以适当的 GNUInstallDirs 变量开头的路径。这允许包维护者通过设置适当的缓存变量来控制安装目的地。以下示例显示 static library 安装到 GNUInstallDirs 提供的默认目标,但其标头安装到项目特定的子目录,而不使用文件集:

add_library(mylib STATIC ...) set_target_properties(mylib PROPERTIES PUBLIC_HEADER mylib.h) include(GNUInstallDirs) install(TARGETS mylib PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/myproj )

除了上面列出的常见选项之外,每个目标还可以接受以下附加参数:

NAMELINK_COMPONENT

3.12 版本中的新功能。

在某些平台上,版本共享的 library 具有符号链接,例如:

lib.so -> lib.so.1

其中 lib.so.1 是 library 的名称, lib.so 是 "namelink" ,允许链接器在给定 -l 时找到 library 。 NAMELINK_COMPONENT 选项与 COMPONENT 选项类似,但它会更改共享 library 名称链接(如果已生成)的安装组件。如果未指定,则默认为 COMPONENT 的值。在 LIBRARY 块之外使用此参数是错误的。

考虑以下示例:

install(TARGETS mylib LIBRARY COMPONENT Libraries NAMELINK_COMPONENT Development PUBLIC_HEADER COMPONENT Development )

在这种情况下,如果您选择仅安装 Development 组件,则标头和名称链接都将安装,而不会安装 library 。(如果您没有同时安装 Libraries 组件,则名称链接将是一个悬空符号链接,并且链接到 library 的项目将出现生成错误。)如果您仅安装 Libraries 组件,则仅安装 library ,而不会安装标题和名称链接。

此选项通常用于具有单独的运行时包和开发包的包管理器。例如,在 Debian 系统上, library 预计位于运行时包中,标头和名称链接预计位于开发包中。

有关创建版本共享库的详细信息,请参阅 VERSION 和 SOVERSION 目标属性。

NAMELINK_ONLY

当安装 library 目标时,此选项会导致仅安装名称链接。在版本化共享 libraries 没有名称链接的平台上,或者当 library 没有版本化时, NAMELINK_ONLY 选项不会安装任何内容。在 LIBRARY 块之外使用此参数是错误的。

当给出 NAMELINK_ONLY 时,可以使用 NAMELINK_COMPONENT 或 COMPONENT 来指定名称链接的安装组件,但通常应首选 COMPONENT 。

NAMELINK_SKIP

与 NAMELINK_ONLY 类似,但它具有相反的效果:在安装 library 目标时,它会导致安装名称链接之外的 library 文件。当 NAMELINK_ONLY 或 NAMELINK_SKIP 均未给出时,两个部分均已安装。在版本化共享 libraries 没有符号链接的平台上或者当 library 没有版本化时, NAMELINK_SKIP 将安装 library 。在 LIBRARY 块之外使用此参数是错误的。

如果指定 NAMELINK_SKIP ,则 NAMELINK_COMPONENT 无效。不建议 NAMELINK_SKIP 与 NAMELINK_COMPONENT 配合使用。

install(TARGETS) 命令还可以在顶层接受以下选项:

EXPORT

此选项将已安装的目标文件与名为 的导出相关联。它必须出现在任何目标选项之前。要实际安装导出文件本身,请调用 install(EXPORT) ,如下所述。请参阅 EXPORT_NAME 目标属性的文档以更改导出目标的名称。

如果使用 EXPORT 并且目标包括 PUBLIC 或 INTERFACE 文件集,则必须使用 FILE_SET 参数指定所有这些文件集。与目标关联的所有 PUBLIC 或 INTERFACE 文件集都包含在导出中。

INCLUDES DESTINATION

此选项指定由 install(EXPORT) 命令导出时将添加到 的 INTERFACE_INCLUDE_DIRECTORIES 目标属性的目录列表。如果指定了相对路径,则将其视为相对于 $ 。

RUNTIME_DEPENDENCY_SET

3.21 版本中的新功能。

此选项会导致已安装的可执行文件、共享库和模块目标的所有运行时依赖项添加到指定的运行时依赖项集中。然后可以使用 install(RUNTIME_DEPENDENCY_SET) 命令安装该套件。

该关键字与 RUNTIME_DEPENDENCIES 关键字是互斥的。

RUNTIME_DEPENDENCIES

3.21 版本中的新功能。

此选项会导致已安装的可执行文件、共享库和模块目标的所有运行时依赖项与目标本身一起安装。 RUNTIME 、 LIBRARY 、 FRAMEWORK 和通用参数用于确定这些依赖项的安装属性( DESTINATION 、 COMPONENT 等)。

RUNTIME_DEPENDENCIES 在语义上等同于以下一对调用:

install(TARGETS ... RUNTIME_DEPENDENCY_SET ) install(RUNTIME_DEPENDENCY_SET args...)

其中 将是随机生成的集合名称。 args... 可能包含 install(RUNTIME_DEPENDENCY_SET) 命令支持的以下任何关键字:

DIRECTORIES PRE_INCLUDE_REGEXES PRE_EXCLUDE_REGEXES POST_INCLUDE_REGEXES POST_EXCLUDE_REGEXES POST_INCLUDE_FILES POST_EXCLUDE_FILES

RUNTIME_DEPENDENCIES 和 RUNTIME_DEPENDENCY_SET 关键字是互斥的。

可以在对该命令的 TARGETS 形式的单次调用中指定一组或多组属性。目标可以多次安装到不同位置。考虑假设的目标 myExe 、 mySharedLib 和 myStaticLib 。代码:

install(TARGETS myExe mySharedLib myStaticLib RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib/static) install(TARGETS mySharedLib DESTINATION /some/full/path)

将安装 myExe 至 /bin 和 myStaticLib 至 /lib/static 。在非 DLL 平台上, mySharedLib 将安装到 /lib 和 /some/full/path 上。在 DLL 平台上, mySharedLib DLL 将安装到 /bin 和 /some/full/path ,其导入的 library 将安装到 /lib/static 和 /some/full/path 。

Interface Libraries 可能会列在要安装的目标中。它们不安装任何工件,但将包含在关联的 EXPORT 中。如果列出了 Object Libraries 但未给出其目标文件的目标,则它们将导出为 Interface Libraries 。这足以满足在其实现中链接到对象 libraries 的其他目标的传递使用要求。

安装 EXCLUDE_FROM_ALL 目标属性设置为 TRUE 的目标具有未定义的行为。

版本 3.3 中的新增功能:作为 DESTINATION 参数给出的安装目标可以使用 "generator expressions" 和语法 $ 。有关可用表达式,请参阅 cmake-generator-expressions(7) 手册。

3.13 版新增功能: install(TARGETS) 可以安装在其他目录中创建的目标。使用此类跨目录安装规则时,从子目录运行 make install (或类似的)将不能保证其他目录中的目标是最新的。您可以使用 target_link_libraries() 或 add_dependencies() 确保在运行特定于子目录的安装规则之前构建此类目录外目标。

安装导入的运行时工件

3.21 版本中的新功能。

install(IMPORTED_RUNTIME_ARTIFACTS targets... [RUNTIME_DEPENDENCY_SET ] [[LIBRARY|RUNTIME|FRAMEWORK|BUNDLE] [DESTINATION ] [PERMISSIONS permissions...] [CONFIGURATIONS [Debug|Release|...]] [COMPONENT ] [OPTIONAL] [EXCLUDE_FROM_ALL] ] [...] )

IMPORTED_RUNTIME_ARTIFACTS 表单指定安装导入目标的运行时工件的规则。如果项目想要在其安装中捆绑外部可执行文件或模块,则可以这样做。 LIBRARY 、 RUNTIME 、 FRAMEWORK 和 BUNDLE 参数具有与 TARGETS 模式中相同的语义。仅安装导入目标的运行时工件( FRAMEWORK libraries 、 MACOSX_BUNDLE 可执行文件和 BUNDLE CFBundles 的情况除外)。例如,不安装与 DLL 关联的标头和导入 libraries 。对于 FRAMEWORK libraries 、 MACOSX_BUNDLE 可执行文件和 BUNDLE CFBundles,将安装整个目录。

RUNTIME_DEPENDENCY_SET 选项会导致导入的可执行文件、共享 library 和模块 library targets 的运行时工件添加到 运行时依赖项集中。然后可以使用 install(RUNTIME_DEPENDENCY_SET) 命令安装该集。

Installing Files

Note

如果安装头文件,请考虑使用 target_sources(FILE_SET) 定义的文件集。文件集将标头与目标关联起来,并作为目标的一部分进行安装。

install( files... TYPE | DESTINATION [PERMISSIONS permissions...] [CONFIGURATIONS [Debug|Release|...]] [COMPONENT ] [RENAME ] [OPTIONAL] [EXCLUDE_FROM_ALL])

FILES 表单指定为项目安装文件的规则。作为相对路径给出的文件名是相对于当前源目录进行解释的。如果没有给出 PERMISSIONS 参数,则默认情况下,通过此表单安装的文件会被赋予 OWNER_WRITE 、 OWNER_READ 、 GROUP_READ 和 WORLD_READ 权限。

PROGRAMS 表单与 FILES 表单相同,只是已安装文件的默认权限还包括 OWNER_EXECUTE 、 GROUP_EXECUTE 和 WORLD_EXECUTE 。这种形式旨在安装非目标程序,例如 shell 脚本。使用 TARGETS 表单安装项目内构建的目标。

给予 FILES 或 PROGRAMS 的 files... 列表可以使用具有语法 $ 的 "generator expressions" 。有关可用表达式,请参阅 cmake-generator-expressions(7) 手册。但是,如果任何项目以生成器表达式开始,则其计算结果必须为完整路径。

必须提供 TYPE 或 DESTINATION 之一,但不能同时提供两者。 TYPE 参数指定正在安装的文件的通用文件类型。然后,将通过从 GNUInstallDirs 获取相应的变量来自动设置目的地,或者如果未定义该变量,则使用内置默认值。请参阅下表了解支持的文件类型及其相应的变量和内置默认值。如果项目希望显式定义安装目标,则可以提供 DESTINATION 参数而不是文件类型。

TYPE Argument

GNUInstallDirs Variable

Built-In Default

BIN

${CMAKE_INSTALL_BINDIR}

bin

SBIN

${CMAKE_INSTALL_SBINDIR}

sbin

LIB

${CMAKE_INSTALL_LIBDIR}

lib

INCLUDE

${CMAKE_INSTALL_INCLUDEDIR}

include

SYSCONF

${CMAKE_INSTALL_SYSCONFDIR}

etc

SHAREDSTATE

${CMAKE_INSTALL_SHARESTATEDIR}

com

LOCALSTATE

${CMAKE_INSTALL_LOCALSTATEDIR}

var

RUNSTATE

${CMAKE_INSTALL_RUNSTATEDIR}

/run

DATA

${CMAKE_INSTALL_DATADIR}

INFO

${CMAKE_INSTALL_INFODIR}

/info

LOCALE

${CMAKE_INSTALL_LOCALEDIR}

/locale

MAN

${CMAKE_INSTALL_MANDIR}

/man

DOC

${CMAKE_INSTALL_DOCDIR}

/doc

希望遵循将标头安装到特定于项目的子目录的常见做法的项目将需要提供目标而不是依赖于上述内容。使用文件集作为标头而不是 install(FILES) 会更好(请参阅 target_sources(FILE_SET) )。

请注意,某些类型的内置默认值使用 DATAROOT 目录作为前缀。 DATAROOT 前缀的计算方式与类型类似, CMAKE_INSTALL_DATAROOTDIR 作为变量,T4​​074T 作为内置默认值。您不能将 DATAROOT 用作 TYPE 参数;请使用 DATA 代替。

为了使包符合分发文件系统布局策略,如果项目必须指定 DESTINATION ,建议它们使用以适当的 GNUInstallDirs 变量开头的路径。这允许包维护者通过设置适当的缓存变量来控制安装目的地。以下示例展示了在将映像安装到特定于项目的文档子目录时如何遵循此建议:

include(GNUInstallDirs) install(FILES logo.png DESTINATION ${CMAKE_INSTALL_DOCDIR}/myproj )

版本 3.4 中的新增功能:作为 DESTINATION 参数给出的安装目标可以使用 "generator expressions" 和语法 $ 。有关可用表达式,请参阅 cmake-generator-expressions(7) 手册。

版本 3.20 中的新增功能:作为 RENAME 参数给出的安装重命名可以使用 "generator expressions" 和语法 $ 。有关可用表达式,请参阅 cmake-generator-expressions(7) 手册。

Installing Directories

Note

要安装标头的目录子树,请考虑使用 target_sources(FILE_SET) 定义的文件集。文件集不仅保留目录结构,还将标头与目标相关联并作为目标的一部分安装。

install(DIRECTORY dirs... TYPE | DESTINATION [FILE_PERMISSIONS permissions...] [DIRECTORY_PERMISSIONS permissions...] [USE_SOURCE_PERMISSIONS] [OPTIONAL] [MESSAGE_NEVER] [CONFIGURATIONS [Debug|Release|...]] [COMPONENT ] [EXCLUDE_FROM_ALL] [FILES_MATCHING] [[PATTERN | REGEX ] [EXCLUDE] [PERMISSIONS permissions...]] [...])

DIRECTORY 表单将一个或多个目录的内容安装到给定目标。目录结构被逐字复制到目标。每个目录名称的最后一个部分将附加到目标目录,但可以使用尾部斜杠来避免这种情况,因为它会将最后一个部分留空。作为相对路径给出的目录名称是相对于当前源目录进行解释的。如果没有给出输入目录名称,将创建目标目录,但不会在其中安装任何内容。 FILE_PERMISSIONS 和 DIRECTORY_PERMISSIONS 选项指定给予目标中的文件和目录的权限。如果指定了 USE_SOURCE_PERMISSIONS 而未指定 FILE_PERMISSIONS ,则将从源目录结构复制文件权限。如果未指定权限,文件将被授予在命令的 FILES 形式中指定的默认权限,而目录将被授予在命令的 PROGRAMS 形式中指定的默认权限。

版本 3.1 中的新增功能: MESSAGE_NEVER 选项禁用文件安装状态输出。

可以使用 PATTERN 或 REGEX 选项来精细控制目录的安装。这些 "match" 选项指定通配模式或正则表达式来匹配输入目录中遇到的目录或文件。它们可用于将某些选项(见下文)应用于遇到的文件和目录的子集。每个输入文件或目录的完整路径(带有正斜杠)与表达式匹配。 PATTERN 将仅匹配完整的文件名:与模式匹配的完整路径部分必须出现在文件名的末尾,并且前面有斜杠。 REGEX 将匹配完整路径的任何部分,但它可以使用 / 和 $ 来模拟 PATTERN 行为。默认情况下,所有文件和目录都会安装,无论它们是否匹配。 FILES_MATCHING 选项可以在第一个匹配选项之前给出,以禁用与任何表达式都不匹配的文件(但不是目录)的安装。例如,代码

install(DIRECTORY src/ DESTINATION doc/myproj FILES_MATCHING PATTERN "*.png")

将从源树中提取并安装图像。

某些选项可能遵循 PATTERN 或 REGEX 表达式,如 string(REGEX) 中所述,并且仅应用于与其匹配的文件或目录。 EXCLUDE 选项将跳过匹配的文件或目录。 PERMISSIONS 选项会覆盖匹配文件或目录的权限设置。例如代码

install(DIRECTORY icons scripts/ DESTINATION share/myproj PATTERN "CVS" EXCLUDE PATTERN "scripts/*" PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ)

会将 icons 目录安装到 share/myproj/icons ,将 scripts 目录安装到 share/myproj 。图标将获得默认文件权限,脚本将被授予特定权限,并且任何 CVS 目录将被排除。

必须提供 TYPE 或 DESTINATION 之一,但不能同时提供两者。 TYPE 参数指定所列出的正在安装的目录中的文件的通用文件类型。然后,将通过从 GNUInstallDirs 获取相应的变量来自动设置目的地,或者如果未定义该变量,则使用内置默认值。请参阅下表了解支持的文件类型及其相应的变量和内置默认值。如果项目希望显式定义安装目标,则可以提供 DESTINATION 参数而不是文件类型。

TYPE Argument

GNUInstallDirs Variable

Built-In Default

BIN

${CMAKE_INSTALL_BINDIR}

bin

SBIN

${CMAKE_INSTALL_SBINDIR}

sbin

LIB

${CMAKE_INSTALL_LIBDIR}

lib

INCLUDE

${CMAKE_INSTALL_INCLUDEDIR}

include

SYSCONF

${CMAKE_INSTALL_SYSCONFDIR}

etc

SHAREDSTATE

${CMAKE_INSTALL_SHARESTATEDIR}

com

LOCALSTATE

${CMAKE_INSTALL_LOCALSTATEDIR}

var

RUNSTATE

${CMAKE_INSTALL_RUNSTATEDIR}

/run

DATA

${CMAKE_INSTALL_DATADIR}

INFO

${CMAKE_INSTALL_INFODIR}

/info

LOCALE

${CMAKE_INSTALL_LOCALEDIR}

/locale

MAN

${CMAKE_INSTALL_MANDIR}

/man

DOC

${CMAKE_INSTALL_DOCDIR}

/doc

请注意,某些类型的内置默认值使用 DATAROOT 目录作为前缀。 DATAROOT 前缀的计算方式与类型类似, CMAKE_INSTALL_DATAROOTDIR 作为变量,T4​​074T 作为内置默认值。您不能将 DATAROOT 用作 TYPE 参数;请使用 DATA 代替。

为了使包符合分发文件系统布局策略,如果项目必须指定 DESTINATION ,建议它们使用以适当的 GNUInstallDirs 变量开头的路径。这允许包维护者通过设置适当的缓存变量来控制安装目的地。

版本 3.4 中的新增功能:作为 DESTINATION 参数给出的安装目标可以使用 "generator expressions" 和语法 $ 。有关可用表达式,请参阅 cmake-generator-expressions(7) 手册。

3.5版本新增: DIRECTORY 的 dirs... 列表也可以使用 "generator expressions" 。

自定义安装逻辑 install([[SCRIPT ] [CODE ]] [ALL_COMPONENTS | COMPONENT ] [EXCLUDE_FROM_ALL] [...])

SCRIPT 表单将在安装过程中调用给定的 CMake 脚本文件。如果脚本文件名是相对路径,它将相对于当前源目录进行解释。 CODE 表单将在安装过程中调用给定的 CMake 代码。代码被指定为双引号字符串内的单个参数。例如,代码

install(CODE "MESSAGE(\"Sample install message.\")")

将在安装过程中打印一条消息。

版本 3.21 中的新增功能:当给出 ALL_COMPONENTS 选项时,将为特定于组件的安装的每个组件执行自定义安装脚本代码。该选项与 COMPONENT 选项互斥。

版本 3.14 中的新增功能: 或 可以使用 "generator expressions" 和语法 $ (在 的情况下,这是指它们在文件名中的使用,而不是文件的内容)。有关可用表达式,请参阅 cmake-generator-expressions(7) 手册。

Installing Exports install(EXPORT DESTINATION [NAMESPACE ] [FILE .cmake] [PERMISSIONS permissions...] [CONFIGURATIONS [Debug|Release|...] [CXX_MODULES_DIRECTORY ] [EXPORT_LINK_INTERFACE_LIBRARIES] [COMPONENT ] [EXCLUDE_FROM_ALL]) install(EXPORT_ANDROID_MK DESTINATION [...])

EXPORT 表单生成并安装 CMake 文件,其中包含将目标从安装树导入到另一个项目的代码。目标安装使用上面记录的 install(TARGETS) 签名的 EXPORT 选项与导出 关联。当目标名称写入导入文件时, NAMESPACE 选项会将 添加到目标名称前面。默认情况下,生成的文件将被称为 .cmake ,但 FILE 选项可用于指定不同的名称。为 FILE 选项指定的值必须是扩展名为 .cmake 的文件名。如果给出 CONFIGURATIONS 选项,则仅当安装指定配置之一时才会安装该文件。此外,生成的导入文件将仅引用匹配的目标配置。当策略 CMP0022 为 NEW 时, EXPORT_LINK_INTERFACE_LIBRARIES 关键字(如果存在)会导致导出与 (IMPORTED_)?LINK_INTERFACE_LIBRARIES(_)? 匹配的属性的内容。

Note

安装的 .cmake 文件可能附带要通过通配加载的附加每个配置 -*.cmake 文件。请勿在安装 -config.cmake 文件时使用与包名称相同的导出名称,否则 glob 可能会错误地匹配并加载后者。

当给出 COMPONENT 选项时,列出的 隐式依赖于导出集中提到的所有组件。导出的 .cmake 文件将要求每个导出的组件都存在,以便正确构建相关项目。例如,项目可以定义组件 Runtime 和 Development ,共享 libraries 进入 Runtime 组件, static libraries 和标头进入 Development 组件。导出集通常也是 Development 组件的一部分,但它会从 Runtime 和 Development 组件导出目标。因此,如果安装了 Development 组件,则需要安装 Runtime 组件,反之则不然。如果安装 Development 组件时没有安装 Runtime 组件,则尝试链接到该组件的依赖项目将会出现生成错误。包管理器(例如 APT 和 RPM)通常通过在包元数据中将 Runtime 组件列为 Development 组件的依赖项来处理此问题,确保在标头和 CMake 导出文件存在的情况下始终安装 library 。

3.7 版新增功能:除了 cmake 语言文件之外, EXPORT_ANDROID_MK 模式还可用于指定导出到 android ndk 构建系统。此模式接受与正常导出模式相同的选项。Android NDK 支持使用预构建的 libraries 、 static 和共享。这允许 cmake 构建项目的 libraries 并使它们可用于具有传递依赖项的 ndk 构建系统,包括使用 libraries 所需的标志和定义。

CXX_MODULES_DIRECTORY

Note

实验性的。由 CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API 门控

指定一个子目录来存储导出集中目标的 C++ 模块信息。该目录将填充一些文件,这些文件将必要的目标属性信息添加到相关目标。请注意,如果没有此信息,作为导出集中目标一部分的 C++ 模块的 none 将支持在使用目标中导入。

EXPORT 表单对于帮助外部项目使用当前项目构建和安装的目标很有用。例如,代码

install(TARGETS myexe EXPORT myproj DESTINATION bin) install(EXPORT myproj NAMESPACE mp_ DESTINATION lib/myproj) install(EXPORT_ANDROID_MK myproj DESTINATION share/ndk-modules)

将安装可执行文件 myexe 到 /bin 以及将其导入文件 /lib/myproj/myproj.cmake 和 /share/ndk-modules/Android.mk 的代码。外部项目可以使用 include 命令加载此文件,并使用导入的目标名称 mp_myexe 从安装树引用 myexe 可执行文件,就好像目标是在自己的树中构建的一样。

Note

此命令取代 install_targets() 命令以及 PRE_INSTALL_SCRIPT 和 POST_INSTALL_SCRIPT 目标属性。它还取代了 install_files() 和 install_programs() 命令的 FILES 形式。未定义这些安装规则相对于 install_targets() 、 install_files() 和 install_programs() 命令生成的安装规则的处理顺序。

安装运行时依赖项

3.21 版本中的新功能。

install(RUNTIME_DEPENDENCY_SET [[LIBRARY|RUNTIME|FRAMEWORK] [DESTINATION ] [PERMISSIONS permissions...] [CONFIGURATIONS [Debug|Release|...]] [COMPONENT ] [NAMELINK_COMPONENT ] [OPTIONAL] [EXCLUDE_FROM_ALL] ] [...] [PRE_INCLUDE_REGEXES regexes...] [PRE_EXCLUDE_REGEXES regexes...] [POST_INCLUDE_REGEXES regexes...] [POST_EXCLUDE_REGEXES regexes...] [POST_INCLUDE_FILES files...] [POST_EXCLUDE_FILES files...] [DIRECTORIES directories...] )

安装先前由一个或多个 install(TARGETS) 或 install(IMPORTED_RUNTIME_ARTIFACTS) 命令创建的运行时依赖项集。属于运行时依赖项集的目标的依赖项安装在 DLL 平台上的 RUNTIME 目标和组件中,以及非 DLL 平台上的 LIBRARY 目标和组件中。macOS 框架安装在 FRAMEWORK 目标和组件中。在构建树中构建的目标永远不会作为运行时依赖项安装,它们自己的依赖项也不会安装,除非目标本身是随 install(TARGETS) 安装的。

生成的安装脚本在构建树文件上调用 file(GET_RUNTIME_DEPENDENCIES) 以计算运行时依赖性。构建树可执行文件作为 EXECUTABLES 参数传递,构建树共享 libraries 作为 LIBRARIES 参数传递,构建树模块作为 MODULES 参数传递。在 macOS 上,如果其中一个可执行文件是 MACOSX_BUNDLE ,则该可执行文件将作为 BUNDLE_EXECUTABLE 参数传递。macOS 上的运行时依赖项设置中最多可能有一个此类捆绑可执行文件。 MACOSX_BUNDLE 属性对其他平台没有影响。请注意, file(GET_RUNTIME_DEPENDENCIES) 仅支持收集 Windows、Linux 和 macOS 平台的运行时依赖项,因此 install(RUNTIME_DEPENDENCY_SET) 具有相同的限制。

以下子参数作为 file(GET_RUNTIME_DEPENDENCIES) 的相应参数转发(对于那些提供非空目录、正则表达式或文件列表的子参数)。他们都支持 generator expressions 。

DIRECTORIES PRE_INCLUDE_REGEXES PRE_EXCLUDE_REGEXES POST_INCLUDE_REGEXES POST_EXCLUDE_REGEXES POST_INCLUDE_FILES POST_EXCLUDE_FILES 生成的安装脚本

Note

不建议使用此功能。请考虑使用 cmake --install 。

install() 命令在构建目录内生成一个文件 cmake_install.cmake ,该文件由生成的安装目标和 CPack 在内部使用。您还可以使用 cmake -P 手动调用此脚本。该脚本接受几个变量:

COMPONENT

设置此变量以仅安装单个 CPack 组件,而不是安装所有组件。例如,如果您只想安装 Development 组件,请运行 cmake -DCOMPONENT=Development -P cmake_install.cmake 。

BUILD_TYPE

如果您使用的是多配置生成器,请设置此变量以更改构建类型。例如,要使用 Debug 配置进行安装,请运行 cmake -DBUILD_TYPE=Debug -P cmake_install.cmake 。

DESTDIR

这是一个环境变量而不是 CMake 变量。它允许您更改 UNIX 系统上的安装前缀。详细信息请参见 DESTDIR 。

© 2000–2023 Kitware, Inc. and ContributorsLicensed under the BSD 3-clause License. https://cmake.org/cmake/help/v3.26/command/install.html



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭