You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.7 KiB
66 lines
2.7 KiB
LINK_LIBRARY_OVERRIDE
|
|
---------------------
|
|
|
|
.. versionadded:: 3.24
|
|
|
|
Override the library features associated with libraries from
|
|
:genex:`LINK_LIBRARY` generator expressions. This can be used to resolve
|
|
incompatible library features that result from specifying different features
|
|
for the same library in different :genex:`LINK_LIBRARY` generator expressions.
|
|
|
|
This property supports overriding multiple libraries and features. It expects
|
|
a :ref:`semicolon-separated list <CMake Language Lists>`, where each list item
|
|
has the following form::
|
|
|
|
feature[,link-item]*
|
|
|
|
For each comma-separated ``link-item``, any existing library feature associated
|
|
with it will be ignored for the target this property is set on. The item
|
|
will instead be associated with the specified ``feature``. Each ``link-item``
|
|
can be anything that would be accepted as part of a ``library-list`` in a
|
|
:genex:`LINK_LIBRARY` generator expression.
|
|
|
|
.. code-block:: cmake
|
|
|
|
add_library(lib1 ...)
|
|
add_library(lib2 ...)
|
|
add_library(lib3 ...)
|
|
|
|
target_link_libraries(lib1 PUBLIC "$<LINK_LIBRARY:feature1,external>")
|
|
target_link_libraries(lib2 PUBLIC "$<LINK_LIBRARY:feature2,lib1>")
|
|
target_link_libraries(lib3 PRIVATE lib1 lib2)
|
|
|
|
# lib1 is associated with both feature2 and no feature. Without any override,
|
|
# this would result in a fatal error at generation time for lib3.
|
|
# Define an override to resolve the incompatible feature associations.
|
|
set_property(TARGET lib3 PROPERTY LINK_LIBRARY_OVERRIDE "feature2,lib1,external")
|
|
|
|
# lib1 and external will now be associated with feature2 instead when linking lib3
|
|
|
|
It is also possible to override any feature with the pre-defined ``DEFAULT``
|
|
library feature. This effectively discards any feature for that link item,
|
|
for that target only (``lib3`` in this example):
|
|
|
|
.. code-block:: cmake
|
|
|
|
# When linking lib3, discard any library feature for lib1, and use feature2 for external
|
|
set_property(TARGET lib3 PROPERTY LINK_LIBRARY_OVERRIDE
|
|
"DEFAULT,lib1"
|
|
"feature2,external"
|
|
)
|
|
|
|
The above example also demonstrates how to specify different feature overrides
|
|
for different link items. See the :prop_tgt:`LINK_LIBRARY_OVERRIDE_<LIBRARY>`
|
|
target property for an alternative way of overriding library features for
|
|
individual libraries, which may be simpler in some cases. If both properties
|
|
are defined and specify an override for the same link item,
|
|
:prop_tgt:`LINK_LIBRARY_OVERRIDE_<LIBRARY>` takes precedence over
|
|
``LINK_LIBRARY_OVERRIDE``.
|
|
|
|
Contents of ``LINK_LIBRARY_OVERRIDE`` may use
|
|
:manual:`generator expressions <cmake-generator-expressions(7)>`.
|
|
|
|
For more information about library features, see the
|
|
:variable:`CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE>` and
|
|
:variable:`CMAKE_LINK_LIBRARY_USING_<FEATURE>` variables.
|