|
|
|
Handling Compiler Driver Differences
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
To pass options to the linker tool, each compiler driver has its own syntax.
|
|
|
|
The ``LINKER:`` prefix and ``,`` separator can be used to specify, in a portable
|
|
|
|
way, options to pass to the linker tool. ``LINKER:`` is replaced by the
|
|
|
|
appropriate driver option and ``,`` by the appropriate driver separator.
|
|
|
|
The driver prefix and driver separator are given by the values of the
|
|
|
|
:variable:`CMAKE_<LANG>_LINKER_WRAPPER_FLAG` and
|
|
|
|
:variable:`CMAKE_<LANG>_LINKER_WRAPPER_FLAG_SEP` variables.
|
|
|
|
|
|
|
|
For example, ``"LINKER:-z,defs"`` becomes ``-Xlinker -z -Xlinker defs`` for
|
|
|
|
``Clang`` and ``-Wl,-z,defs`` for ``GNU GCC``.
|
|
|
|
|
|
|
|
The ``LINKER:`` prefix can be specified as part of a ``SHELL:`` prefix
|
|
|
|
expression.
|
|
|
|
|
|
|
|
The ``LINKER:`` prefix supports, as an alternative syntax, specification of
|
|
|
|
arguments using the ``SHELL:`` prefix and space as separator. The previous
|
|
|
|
example then becomes ``"LINKER:SHELL:-z defs"``.
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
Specifying the ``SHELL:`` prefix anywhere other than at the beginning of the
|
|
|
|
``LINKER:`` prefix is not supported.
|