| CMP0197 |
| ------- |
| |
| .. versionadded:: 4.1 |
| |
| MSVC link ``-machine:`` flag is not in ``CMAKE_*_LINKER_FLAGS``. |
| |
| When using MSVC-like compilers in CMake 4.0 and below, the linker's |
| ``-machine:`` flag is added via language-agnostic linker flag variables: |
| |
| * :variable:`CMAKE_EXE_LINKER_FLAGS` |
| * :variable:`CMAKE_SHARED_LINKER_FLAGS` |
| * :variable:`CMAKE_MODULE_LINKER_FLAGS` |
| * :variable:`CMAKE_STATIC_LINKER_FLAGS` |
| |
| This is problematic when multiple languages' toolchains disagree about |
| if/how to pass the flag through a compiler driver to the linker. |
| Furthermore, carrying the flag in public-facing variables allows projects |
| or users to change it even though it is required. |
| |
| CMake 4.1 and above prefer to leave the ``-machine:`` flag out of |
| ``CMAKE_*_LINKER_FLAGS`` variables, and instead generate the link |
| flag automatically where needed. |
| |
| This policy provides compatibility with projects that have not been updated |
| to expect the lack of the ``-machine:`` flags. The policy setting takes |
| effect as of the first :command:`project` or :command:`enable_language` |
| command that initializes the above-listed ``CMAKE_*_LINKER_FLAGS`` variables. |
| |
| .. note:: |
| |
| Once the policy has taken effect at the top of a project for a given |
| language, that choice must be used throughout the tree for that language. |
| In projects that have nested projects in subdirectories, be sure to |
| convert everything together. |
| |
| The ``OLD`` behavior for this policy is to place the MSVC ``-machine:`` |
| flag in ``CMAKE_*_LINKER_FLAGS``. The ``NEW`` behavior for this policy |
| is to *not* place the MSVC ``-machine:`` flag in ``CMAKE_*_LINKER_FLAGS``. |
| |
| .. |INTRODUCED_IN_CMAKE_VERSION| replace:: 4.1 |
| .. |WARNS_OR_DOES_NOT_WARN| replace:: does *not* warn |
| .. include:: include/STANDARD_ADVICE.rst |
| |
| .. include:: include/DEPRECATED.rst |