导航

  • 索引
  • 下一页 |
  • 上一页 |
  • CMake 4.2.0 »
  • 文档 »
  • cmake-variables(7) »
  • CMAKE_LINK_LIBRARY_<FEATURE>_ATTRIBUTES

CMAKE_LINK_LIBRARY_<FEATURE>_ATTRIBUTES¶

3.30 版本新增。

此变量定义了指定链接库 <FEATURE> 的行为。它指定了 <FEATURE> 如何与其他特性交互,何时应用 <FEATURE>,以及在 CMake 组装最终链接器命令行时如何处理 <FEATURE> 的各个方面(例如,去重)。

<FEATURE> 的链接器标志的语法由 CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE> 和 CMAKE_LINK_LIBRARY_USING_<FEATURE> 变量控制。 CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE>_SUPPORTED 和 CMAKE_LINK_LIBRARY_USING_<FEATURE>_SUPPORTED 变量控制 <FEATURE> 是否可用。

在链接特定语言 <LANG> 时,如果对于同一个 <FEATURE> 也定义了 CMAKE_<LANG>_LINK_LIBRARY_<FEATURE>_ATTRIBUTES 变量,则会忽略 `CMAKE_LINK_LIBRARY_<FEATURE>_ATTRIBUTES`。

在定义目标的目录作用域结束时,`CMAKE_LINK_LIBRARY_<FEATURE>_ATTRIBUTES` 和 CMAKE_<LANG>_LINK_LIBRARY_<FEATURE>_ATTRIBUTES 的值至关重要。

特性属性定义¶

特性属性定义是一个由 `attribute=value(s)` 项组成的 分号分隔的列表。如果一个属性有多个值,这些值必须用逗号分隔。

支持以下属性

LIBRARY_TYPE=<library-type-list>

指定特性支持的库类型。支持的值包括:`STATIC`、`SHARED`、`MODULE` 和 `EXECUTABLE`。

如果未指定此属性,则默认为 `LIBRARY_TYPE=STATIC,SHARED,MODULE,EXECUTABLE`。

如果特性与不受支持的库类型一起使用,CMake 将发出开发警告,并且该特性将被忽略。

OVERRIDE=<feature-list>

指定在发生冲突时此特性会替换哪些特性。此覆盖机制已被 LINK_LIBRARY_OVERRIDE 或 LINK_LIBRARY_OVERRIDE_<LIBRARY> 目标属性定义(如果已定义)所取代。

如果未指定此属性,则默认为空列表。

DEDUPLICATION=YES|NO|DEFAULT

指定使用此特性的库的去重策略。

是

库始终会去重。CMake 通常应用的默认策略将被忽略。

否

库永远不会去重。CMake 通常应用的默认策略将被忽略。

DEFAULT

让 CMake 自动确定去重策略。

如果未指定此属性,则将使用 `DEFAULT`。

示例¶

一个常见的需求是在创建共享库时加载一个完整的存档。内置的 `WHOLE_ARCHIVE` 特性可用于此目的。该内置特性的实现设置了以下链接库特性属性:

set(CMAKE_LINK_LIBRARY_WHOLE_ARCHIVE_ATTRIBUTES
  LIBRARY_TYPE=STATIC
  OVERRIDE=DEFAULT
  DEDUPLICATION=YES
)
LIBRARY_TYPE=STATIC

此特性仅对静态库有意义。

OVERRIDE=DEFAULT

由于 `DEFAULT` 特性和 `WHOLE_ARCHIVE` 特性兼容且能提升用户体验,`DEFAULT` 特性将被 `WHOLE_ARCHIVE` 特性覆盖:可以自由使用标准库规范和 `$<LINK_LIBRARY:WHOLE_ARCHIVE>`。

DEDUPLICATION=YES

当使用此特性时,链接器会加载静态库中的所有符号,因此无需在链接器命令行中重复指定该库。

`WHOLE_ARCHIVE` 特性可如下使用:

add_library(A STATIC ...)
add_library(B STATIC ...)

target_link_libraries(B PUBLIC A)
target_link_libraries(A PUBLIC B)

add_library(global SHARED ...)
target_link_libraries(global PRIVATE $<LINK_LIBRARY:WHOLE_ARCHIVE,A>)

生成的链接命令将只会在链接器命令行中包含一次库 `A` 的指定,并且链接器标志将确保从库 `A` 中加载所有符号。

目录

  • CMAKE_LINK_LIBRARY_<FEATURE>_ATTRIBUTES
    • 特性属性定义
    • 示例

上一主题

CMAKE_LINK_LIBRARIES_STRATEGY

下一主题

CMAKE_LINK_LIBRARY_FILE_FLAG

本页

  • 显示源

快速搜索

导航

  • 索引
  • 下一页 |
  • 上一页 |
  • CMake 4.2.0 »
  • 文档 »
  • cmake-variables(7) »
  • CMAKE_LINK_LIBRARY_<FEATURE>_ATTRIBUTES
© Copyright 2000-2025 Kitware, Inc. and Contributors. 使用 Sphinx 8.2.3 创建。