export¶
导出目标或包,使外部项目可以直接从当前项目的构建树中使用它们,而无需安装。
查看 install(EXPORT)
命令,从安装树中导出目标。
概要¶
export(TARGETS <target>... [...]) export(EXPORT <export-name> [...]) export(PACKAGE <PackageName>) export(SETUP <export-name> [...])
导出目标¶
- export(TARGETS <target>... [...])¶
export(TARGETS <target>... [NAMESPACE <namespace>]
[APPEND] FILE <filename> [EXPORT_LINK_INTERFACE_LIBRARIES]
[CXX_MODULES_DIRECTORY <directory>])
创建一个可能被外部项目包含的文件 <filename>
,该文件用于从当前项目的构建树中导入 <target>...
命名的目标。在交叉编译期间非常有用,可以在一个项目中构建可在主机平台上运行的实用程序可执行文件,然后将其导入另一个为目标平台编译的项目中。
此命令创建的文件特定于构建树,切勿安装。查看 install(EXPORT)
命令,从安装树中导出目标。
选项如下
NAMESPACE <namespace>
将
<namespace>
字符串前缀到写入文件的所有目标名称。APPEND
追加到文件,而不是覆盖文件。可用于将多个目标增量导出到同一个文件。
EXPORT_LINK_INTERFACE_LIBRARIES
在导出时包含名称符合模式
(IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?
的属性内容,即使策略CMP0022
为 NEW。这有助于支持使用低于 2.8.12 版的 CMake 的使用者。CXX_MODULES_DIRECTORY <directory>
在 3.28 版本中添加。
将 C++ 模块属性导出到指定目录下的文件中。每个文件都将根据目标的导出名称(没有命名空间)进行命名。这些文件会自动包含在导出文件中。
此签名需要明确列出所有目标。如果导出中包含库目标,但未包含链接到的目标,则该行为未指定。请参阅 export(EXPORT)
签名以自动从构建树导出与 install(EXPORT)
(从安装树)导出的相同目标。
注意
如果 Xcode
下的 对象库 在 CMAKE_OSX_ARCHITECTURES
中列出了多个架构,则会出现特殊处理情况。在这种情况下,它们将作为 接口库 进行导出且没有可供客户端使用的对象文件。这足以满足链接到对象库中的实现中其他目标的传递使用要求。
此命令从构建树导出所有 构建配置。请参阅 CMAKE_MAP_IMPORTED_CONFIG_<CONFIG>
变量以将依赖项目的配置映射到导出的配置。
将 Target 导出到 Android.mk¶
export(TARGETS <target>... ANDROID_MK <filename>)
在 3.7 版本中添加。
此签名通过创建引用预构建目标的 Android.mk
文件将 cmake 构建的目标导出到 android ndk 构建系统。Android NDK 支持使用预编译库,包括静态库和共享库。这使得 cmake 能够构建某项目的库,并将其提供给 ndk 构建系统,其中包含使用这些库所需的传递依赖项、包含标志和定义。此签名获取 target 列表,并将它们放入由给定的 <filename>
指定的 Android.mk
文件中。仅当对所有给定的 target 策略 CMP0022
为 NEW 时才可以使用此签名。如果该策略对其中一个 target 设置为 OLD,则会发出错误。
导出与 install(EXPORT) 匹配的 target¶
- export(EXPORT <export-name> [...])
export(EXPORT <export-name> [NAMESPACE <namespace>] [FILE <filename>]
[CXX_MODULES_DIRECTORY <directory>] [EXPORT_PACKAGE_DEPENDENCIES])
创建一个文件 <filename>
,其他项目可以包含该文件,以从当前项目的生成树中导入目标。这与 export(TARGETS)
签名相同,只是未明确列出目标。它将导出与安装导出 <export-name>
相关联的目标。目标安装可以与导出 <export-name>
关联,使用 install(TARGETS)
命令的 EXPORT
选项。
EXPORT_PACKAGE_DEPENDENCIES
注意
实验性。受
CMAKE_EXPERIMENTAL_EXPORT_PACKAGE_DEPENDENCIES
控制。指定应导出
find_dependency()
调用。有关此操作方式的详细信息,请参阅install(EXPORT)
。
导出包¶
- export(PACKAGE <PackageName>)¶
export(PACKAGE <PackageName>)
将当前生成目录存储在包 <PackageName>
的 CMake 用户包注册表中。在搜索包 <PackageName>
时,find_package()
命令可能会考虑该目录。这有助于依赖项目找到和使用当前项目生成树中的包,而无需用户帮助。请注意,此命令创建的包注册表中的条目仅与生成树配合使用包配置文 (<PackageName>Config.cmake
) 一起使用时才有效。在某些情况下(例如,打包和系统范围安装),最好不要编写用户包注册表。
在版本 3.1 中更改:如果启用 CMAKE_EXPORT_NO_PACKAGE_REGISTRY
变量,则 export(PACKAGE)
命令将不执行任何操作。
在版本 3.15 中更改:默认情况下,export(PACKAGE)
命令不执行任何操作(请参阅策略 CMP0090
),因为填充用户包注册表会影响源树和生成树之外的操作。设置 CMAKE_EXPORT_PACKAGE_REGISTRY
变量可将生成目录添加到 CMake 用户包注册表。
配置导出的内容¶
- export(SETUP <export-name> [...])¶
export(SETUP <export-name>
[PACKAGE_DEPENDENCY <dep>
[ENABLED (<bool-true>|<bool-false>|AUTO)]
[EXTRA_ARGS <args>...]
] [...]
[TARGET <target>
[XCFRAMEWORK_LOCATION <location>]
] [...]
)
在 3.29 版本中添加。
配置导出的内容参数。参数如下
PACKAGE_DEPENDENCY <dep>
注意
实验性。受
CMAKE_EXPERIMENTAL_EXPORT_PACKAGE_DEPENDENCIES
控制。指定要配置的包依赖项。在
find_dependency()
调用期间,这会更改export(EXPORT)
和install(EXPORT)
书写的方式。<dep>
是要导出的包的名称。此参数接受以下附加参数ENABLED
手动控制是否导出依赖项。它接受以下值
<bool-true>
CMake 识别为“true”的任何值。始终导出依赖项,即使没有导出的目标依赖于它。这可用于手动向导出中添加
find_dependency()
调用。<bool-false>
CMake 识别为“false”的任何值。即使导出的目标依赖于它,也不导出依赖项。
AUTO
仅在导出的目标依赖于它时导出依赖项。
EXTRA_ARGS <args>
指定
REQUIRED
参数后要传递给find_dependency()
的其他参数。
TARGET <target>
指定要在此导出中配置的目标。此参数接受以下附加参数
XCFRAMEWORK_LOCATION
指定包含此目标的库的
.xcframework
的位置。如果指定,生成的代码将检查.xcframework
是否存在,如果存在,它将使用.xcframework
作为其导入位置,而不是已安装的库。