**Features available in all environments** ``DEFAULT`` This feature enables default link expression. This is mainly useful with :prop_tgt:`LINK_LIBRARY_OVERRIDE` and :prop_tgt:`LINK_LIBRARY_OVERRIDE_` target properties. **Features available for a subset of environments** ``WHOLE_ARCHIVE`` Force load of all members in a static library. Target platforms supported: all ``Apple`` variants, ``Linux``, all ``BSD`` variants, ``SunOS``, ``Windows``, ``CYGWIN``, and ``MSYS``. Platform-specific notes: * On Apple platforms, the library must be specified as a CMake target name, a library file name (such as ``libfoo.a``), or a library file path (such as ``/path/to/libfoo.a``). It cannot be specified as a plain library name (such as ``foo``, where ``foo`` is not CMake target), due to a limitation in the Apple linker. * On Windows platforms, for ``MSVC`` or MSVC-like toolchains, the version must be greater than ``1900``. **Features available in Apple environments** It is assumed that the linker used is the one provided by `XCode` or is compatible with it. Framework support ``FRAMEWORK`` This option tells the linker to search for the specified framework (use linker option ``-framework``). ``NEEDED_FRAMEWORK`` This is the same as the ``FRAMEWORK`` feature but means to really link with the framework even if no symbols are used from it (use linker option ``-needed_framework``). ``REEXPORT_FRAMEWORK`` This is the same as the ``FRAMEWORK`` feature but also specifies that all symbols in that framework should be available to clients linking to the library being created (use linker option ``-reexport_framework``). ``WEAK_FRAMEWORK`` This is the same as the ``FRAMEWORK`` feature but forces the framework and all references to it to be marked as weak imports (use linker option ``-weak_framework``). Features for framework linking have a special handling in CMake: the framework can be specified as a CMake framework target or file path. In the first case, the target must have the :prop_tgt:`FRAMEWORK` target property set as ``TRUE`` to enable framework handling. In the later case, if the path includes a directory part, this one will be specified as framework search path at link step. .. code-block:: cmake add_library(lib SHARED ...) target_link_libraries(lib PRIVATE "$") # at link step we will have: # -F/path/to -needed_framework my_framework .. note:: The expected formats for the file path, with optional parts specified as ``()?``, are: * (/path/to/)?FwName(.framework)? * (/path/to/)?FwName.framework/FwName * (/path/to/)?FwName.framework/Versions/\*/FwName Library support ``NEEDED_LIBRARY`` This is the same as specifying a link item (target or library) but means to really link with the item even if no symbols are used from it (use linker option ``-needed_library`` or ``-needed-l``). ``REEXPORT_LIBRARY`` This is the same as specifying a link item (target or library) but also specifies that all symbols in that item should be available to clients linking to the library being created (use linker option ``-reexport_library`` or ``-reexport-l``). ``WEAK_LIBRARY`` This is the same as specifying a link item (target or library) but forces the item and all references to it to be marked as weak imports (use linker option ``-weak_library`` or ``-weak-l``).