mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 05:40:54 -06:00
When targeting the MSVC ABI, define `_MBCS` by default if the project does not define `_SBCS` or `_UNICODE`. Visual Studio has long defined one of the three character set macros automatically. For consistency, define it when compiling for the MSVC ABI with other generators. Add policy CMP0204 for compatibility. Fixes: #27275
30 lines
1.2 KiB
ReStructuredText
30 lines
1.2 KiB
ReStructuredText
CMP0204
|
|
-------
|
|
|
|
.. versionadded:: 4.2
|
|
|
|
A character set is always defined when targeting the MSVC ABI.
|
|
|
|
In CMake 4.1 and below, :ref:`Visual Studio Generators` compile sources in with
|
|
``_MBCS``, ``_UNICODE`` or ``_SBCS`` defined due to behavior of Visual Studio
|
|
itself. The preprocessor definition is not modeled by CMake and is therefore
|
|
not added by other generators, such as :generator:`Ninja`.
|
|
|
|
CMake 4.2 and above, when targeting the MSVC ABI, prefer to compile sources
|
|
with ``_MBCS`` defined by all generators unless another charset preprocessor
|
|
definition is found (``_UNICODE`` or ``_SBCS``).
|
|
This policy provides compatibility with projects that have not been updated
|
|
to be aware of the definition. Its setting is recorded by each target as
|
|
it is created, and affects compilation of sources in that target.
|
|
|
|
The ``OLD`` behavior for this policy does not model the ``_MBCS``
|
|
preprocessor definition in CMake itself. The ``NEW`` behavior for this
|
|
policy adds the ``_MBCS`` preprocessor definition to sources
|
|
as a default encoding when targeting the MSVC ABI.
|
|
|
|
.. |INTRODUCED_IN_CMAKE_VERSION| replace:: 4.2
|
|
.. |WARNS_OR_DOES_NOT_WARN| replace:: does *not* warn
|
|
.. include:: include/STANDARD_ADVICE.rst
|
|
|
|
.. include:: include/DEPRECATED.rst
|