| 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 |