Help: Restructure and improve LINKER_TYPE docs

This commit is contained in:
Craig Scott
2024-03-22 21:11:50 +11:00
parent c39bc6e412
commit 6ba2bbc0f3
3 changed files with 46 additions and 43 deletions

View File

@@ -6,21 +6,23 @@ LINKER_TYPE
Specify which linker will be used for the link step. The property value may use
:manual:`generator expressions <cmake-generator-expressions(7)>`.
.. include:: ../variable/LINKER_PREDEFINED_TYPES.txt
This property is not supported on :generator:`Green Hills MULTI` and
:generator:`Visual Studio 9 2008` generators.
The implementation details for the selected linker will be provided by the
:variable:`CMAKE_<LANG>_USING_LINKER_<TYPE>` variable. For example:
.. code-block:: cmake
add_library(lib1 SHARED ...)
set_property(TARGET lib1 PROPERTY LINKER_TYPE LLD)
This specifies that ``lib1`` should use linker type ``LLD`` for the link step.
The implementation details will be provided by the variable
:variable:`CMAKE_<LANG>_USING_LINKER_<TYPE>` with ``<TYPE>`` having the value
``LLD``.
The command line options that will be passed to the toolchain will be provided
by the ``CMAKE_<LANG>_USING_LINKER_LLD`` variable.
This property is not supported on :generator:`Green Hills MULTI` and
:generator:`Visual Studio 9 2008` generators.
.. note::
It is assumed that the linker specified is fully compatible with the standard
one. CMake will not do any options translation.
.. include:: ../variable/LINKER_PREDEFINED_TYPES.txt
Note that the linker would typically be set using :variable:`CMAKE_LINKER_TYPE`
for the whole build rather than setting the ``LINKER_TYPE`` property on
individual targets.

View File

@@ -5,10 +5,6 @@ CMAKE_LINKER_TYPE
Specify which linker will be used for the link step.
.. note::
It is assumed that the linker specified is fully compatible with the standard
one. CMake will not do any options translation.
This variable is used to initialize the :prop_tgt:`LINKER_TYPE` property
on each target created by a call to :command:`add_library` or
:command:`add_executable`. It is meaningful only for targets having a

View File

@@ -1,59 +1,64 @@
.. note::
It is assumed that the linker specified is fully compatible with the default
one the compiler would normally invoke. CMake will not do any option
translation.
Linker types are case-sensitive and may only contain letters, numbers and
underscores. Linker types defined in all uppercase are reserved for CMake's own
built-in types. The pre-defined linker types are:
``DEFAULT``
This type corresponds to standard linking, essentially equivalent to
not specifying :prop_tgt:`LINKER_TYPE` target property.
This type corresponds to standard linking, essentially equivalent to the
:prop_tgt:`LINKER_TYPE` target property not being set at all.
``SYSTEM``
Use the standard linker delivered by the platform or the standard toolkit
(for example, ``SYSTEM`` imply Microsoft linker for all ``MSVC`` compatible
compilers). This type is supported for the following platforms/compilers:
Use the standard linker provided by the platform or toolchain. For example,
this implies the Microsoft linker for all ``MSVC``-compatible compilers.
This type is supported for the following platform-compiler combinations:
* Linux, for ``GNU``, ``Clang``, ``LLVMFlang`` and ``NVIDIA`` compilers.
* All Apple variants for ``AppleClang``, ``Clang`` and ``GNU`` compilers.
* Windows, for ``MSVC``, ``GNU``, ``Clang`` and ``NVIDIA`` compilers.
* Linux: ``GNU``, ``Clang``, ``LLVMFlang`` and ``NVIDIA`` compilers.
* All Apple variants: ``AppleClang``, ``Clang`` and ``GNU`` compilers.
* Windows: ``MSVC``, ``GNU``, ``Clang`` and ``NVIDIA`` compilers.
``LLD``
Use the ``LLVM`` linker. This type is supported for the following
platforms/compilers:
platform-compiler combinations:
* Linux, for ``GNU``, ``Clang``, ``LLVMFlang`` and ``NVIDIA`` compilers.
* All Apple variants for ``Clang`` and ``AppleClang`` compilers.
* Windows, for ``GNU``, ``Clang`` compilers with ``GNU`` front-end and
``CLang``, ``MSVC`` and ``NVIDIA`` compilers with ``MSVC`` front-end.
* Linux: ``GNU``, ``Clang``, ``LLVMFlang`` and ``NVIDIA`` compilers.
* All Apple variants: ``Clang`` and ``AppleClang`` compilers.
* Windows: ``GNU``, ``Clang``, ``Clang`` compilers with ``GNU`` front-end,
``MSVC`` and ``NVIDIA`` compilers with ``MSVC`` front-end.
``BFD``
Use the ``GNU`` linker. This type is supported for the following
platforms/compilers:
platform-compiler combinations:
* Linux, for ``GNU``, ``Clang``, ``LLVMFlang`` and ``NVIDIA`` compilers.
* Windows, for ``GNU``, ``Clang`` compilers with ``GNU`` front-end.
* Linux: ``GNU``, ``Clang``, ``LLVMFlang`` and ``NVIDIA`` compilers.
* Windows: ``GNU``, ``Clang`` compilers with ``GNU`` front-end.
``GOLD``
Supported on Linux platform for ``GNU``, ``Clang``, ``LLVMFlang`` and
Supported on Linux platform with ``GNU``, ``Clang``, ``LLVMFlang`` and
``NVIDIA`` compilers.
``MOLD``
Use the `mold linker <https://github.com/rui314/mold>`_. This type is
supported on the following platforms:
supported on the following platform-compiler combinations:
* Linux platform for ``GNU``, ``Clang``, ``LLVMFlang`` and ``NVIDIA``
compilers.
* All Apple variants for ``Clang`` and ``AppleClang`` compilers as an
alias to ``SOLD``.
* Linux: ``GNU``, ``Clang``, ``LLVMFlang`` and ``NVIDIA`` compilers.
* All Apple variants: ``Clang`` and ``AppleClang`` compilers (acts as an
alias to the `sold linker`_).
``SOLD``
Use the `sold linker <https://github.com/bluewhalesystems/sold>`_. This type
is only supported on Apple platforms for ``Clang`` and ``AppleClang``
compilers.
Use the `sold linker`_. This type is only supported on Apple platforms
with ``Clang`` and ``AppleClang`` compilers.
``APPLE_CLASSIC``
Use the Apple linker in the classic behavior (i.e. before ``Xcode 15.0``).
This type is only supported on Apple platforms for ``GNU``, ``Clang`` and
This type is only supported on Apple platforms with ``GNU``, ``Clang`` and
``AppleClang`` compilers.
``MSVC``
Use the Microsoft linker. This type is only supported on Windows
platform for ``MSVC`` and ``Clang`` compiler with ``MSVC`` front-end.
Use the Microsoft linker. This type is only supported on the Windows
platform with ``MSVC`` and ``Clang`` compiler with ``MSVC`` front-end.
.. _sold linker: https://github.com/bluewhalesystems/sold