# LINKER_TYPE

New in version 3.29.

Specify which linker will be used for the link step. The property value may use `generator expressions`.

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 the `LINKER_TYPE` target property not being set at all.

`SYSTEM`

  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: `GNU`, `Clang`, `LLVMFlang`, `NVIDIA`, and `Swift` compilers.

  - Apple platforms: `AppleClang`, `Clang`, `GNU`, and `Swift` compilers.

  - Windows: `MSVC`, `GNU`, `Clang`, `NVIDIA`, and `Swift` compilers.

`LLD`

  Use the `LLVM` linker. This type is supported for the following platform-compiler combinations:

  - Linux: `GNU`, `Clang`, `LLVMFlang`, `NVIDIA`, and `Swift` compilers.

  - Apple platforms: `Clang`, `AppleClang`, and `Swift` compilers.

  - Windows: `GNU`, `Clang` with MSVC-like front-end, `Clang` with GNU-like front-end, `MSVC`, `NVIDIA` with MSVC-like front-end, and `Swift`.

`BFD`

  Use the `GNU` linker. This type is supported for the following platform-compiler combinations:

  - Linux: `GNU`, `Clang`, `LLVMFlang`, and `NVIDIA` compilers.

  - Windows: `GNU`, `Clang` with GNU-like front-end.

`GOLD`

  Supported on Linux platform with `GNU`, `Clang`, `LLVMFlang`, `NVIDIA`, and `Swift` compilers.

`MOLD`

  Use the mold linker. This type is supported on the following platform-compiler combinations:

  - Linux: `GNU`, `Clang`, `LLVMFlang`, and `NVIDIA` compilers.

  - Apple platforms: `Clang` and `AppleClang` compilers (acts as an alias to the sold linker).

`SOLD`

  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 with `GNU`, `Clang`, `AppleClang`, and `Swift` compilers.

`MSVC`

  Use the Microsoft linker. This type is only supported on the Windows platform with `MSVC`, `Clang` with MSVC-like front-end, and `Swift` compilers.

This property is not supported on `Green Hills MULTI` generator.

The implementation details for the selected linker will be provided by the `CMAKE_<LANG>_USING_LINKER_<TYPE>` variable. For example:

    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 command line options that will be passed to the toolchain will be provided by the `CMAKE_<LANG>_USING_LINKER_LLD` variable.

Note that the linker would typically be set using `CMAKE_LINKER_TYPE` for the whole build rather than setting the `LINKER_TYPE` property on individual targets.