导航

  • 索引
  • 下一页 |
  • 上一页 |
  • CMake 4.2.0 »
  • 文档 »
  • cmake-properties(7) »
  • LINK_LIBRARIES_STRATEGY

LINK_LIBRARIES_STRATEGY¶

在版本 3.31 中添加。

指定目标在链接器命令行上直接链接依赖项的排序策略。当创建目标时,此属性由 CMAKE_LINK_LIBRARIES_STRATEGY 变量的值初始化(如果已设置)。

CMake 使用其 目标链接属性 来生成目标的链接行。特别是,LINK_LIBRARIES 目标属性记录了目标的直接链接依赖项,通常由 target_link_libraries() 调用填充。间接链接依赖项从 LINK_LIBRARIES 中命名为库目标的条目传播,通过遵循其 INTERFACE_LINK_LIBRARIES 属性的传递闭包。CMake 支持多种策略来名义上排序直接和间接链接依赖项,然后对它们进行过滤以实现 工具链特定行为。

以下策略的示例

add_library(A STATIC ...)
add_library(B STATIC ...)
add_library(C STATIC ...)
add_executable(main ...)
target_link_libraries(B PRIVATE A)
target_link_libraries(C PRIVATE A)
target_link_libraries(main PRIVATE A B C)

支持的策略如下:

REORDER_MINIMALLY

LINK_LIBRARIES 的条目始终首先出现,并保持其原始顺序。未被原始条目满足的间接链接依赖项可能会相对于彼此重新排序和去重,但始终附加在原始条目之后。这可能会导致链接行效率较低,但项目可以控制独立条目之间的排序。当混合链接标志和库时,或者当多个库提供给定符号时,这种控制可能很重要。

这是默认设置。

在上面的示例中,此策略通过以其原始条目 A B C 开头来计算 main 的链接行,然后附加另一个 A 来满足 B 和 C 对 A 的依赖。此策略产生的名义顺序为 A B C A。

请注意,对 工具链特定行为 的额外过滤可能会在生成的构建系统中实际调用链接器时对 A 进行去重,从而生成 A B C 或 B C A。

REORDER_FREELY

LINK_LIBRARIES 的条目可以重新排序、去重并与间接链接依赖项混合。这可能会产生更有效的链接行,但不会让项目对独立条目之间的排序进行任何控制。

在上面的示例中,此策略通过重新排序其原始条目 A B C 来计算 main 的链接行,以满足 B 和 C 对 A 的依赖。此策略产生的名义顺序为 B C A。

工具链特定行为¶

在上述策略之一生成了直接和间接链接依赖项的名义顺序之后,在生成的构建系统中实际的链接器调用可能会根据平台特定的要求和链接器功能对条目进行去重。请参阅策略 CMP0156。

例如,如果 REORDER_MINIMALLY 策略生成 A B C A,则实际链接行可能会对 A 进行如下去重:

  • 如果 A 是静态库并且链接器自动重新扫描,则会保留第一个出现,生成 A B C。请参阅策略 CMP0179

  • 如果 A 是 Windows 上的共享库,则会保留第一个出现,生成 A B C。

  • 如果 A 是 macOS 或 UNIX 平台上的共享库,则会保留最后一个出现,生成 B C A。

目录

  • LINK_LIBRARIES_STRATEGY
    • 工具链特定行为

上一主题

LINK_LIBRARIES_ONLY_TARGETS

下一主题

LINK_LIBRARY_OVERRIDE

本页

  • 显示源

快速搜索

导航

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