Navigation

  • index
  • next |
  • previous |
  • CMake »
  • 3.31.0-rc1 Documentation »
  • cmake-variables(7) »
  • CMAKE_LINK_LIBRARIES_STRATEGY

CMAKE_LINK_LIBRARIES_STRATEGYΒΆ

New in version 3.31.

Specify a strategy for ordering targets' direct link dependencies on linker command lines.

The value of this variable initializes the LINK_LIBRARIES_STRATEGY target property of targets as they are created. Set that property directly to specify a strategy for a single target.

CMake generates a target's link line using its Target Link Properties. In particular, the LINK_LIBRARIES target property records the target's direct link dependencies, typically populated by calls to target_link_libraries(). Indirect link dependencies are propagated from those entries of LINK_LIBRARIES that name library targets by following the transitive closure of their INTERFACE_LINK_LIBRARIES properties. CMake supports multiple strategies for passing direct and indirect link dependencies to the linker.

Consider this example for the strategies below:

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)

The supported strategies are:

PRESERVE_ORDER

Entries of LINK_LIBRARIES always appear first and in their original order. Indirect link dependencies not satisfied by the original entries may be reordered and de-duplicated with respect to one another, but are always appended after the original entries. This may result in less efficient link lines, but gives projects control of ordering among independent entries. Such control may be important when intermixing link flags with libraries, or when multiple libraries provide a given symbol.

This is the default.

In the above example, this strategy computes a link line for main by starting with its original entries A B C, and then appends another A to satisfy the dependencies of B and C on A. The final order is A B C A.

REORDER

Entries of LINK_LIBRARIES may be reordered, de-duplicated, and intermixed with indirect link dependencies. This may result in more efficient link lines, but does not give projects any control of ordering among independent entries.

In the above example, this strategy computes a link line for main by re-ordering its original entries A B C to satisfy the dependencies of B and C on A. The final order is B C A.

Note

Regardless of the strategy used, the actual linker invocation for some platforms may de-duplicate entries based on linker capabilities. See policies CMP0156 and CMP0179.

Previous topic

CMAKE_LINK_INTERFACE_LIBRARIES

Next topic

CMAKE_LINK_LIBRARY_<FEATURE>_ATTRIBUTES

This Page

  • Show Source

Quick search

Navigation

  • index
  • next |
  • previous |
  • CMake »
  • 3.31.0-rc1 Documentation »
  • cmake-variables(7) »
  • CMAKE_LINK_LIBRARIES_STRATEGY
© Copyright 2000-2024 Kitware, Inc. and Contributors. Created using Sphinx 7.2.6.