CMP0204¶
版本 4.2 中添加。
当目标为 MSVC ABI 时,始终会定义一个字符集。
在 CMake 4.1 及更早版本中,Visual Studio Generators 会编译源代码并定义 _MBCS、_UNICODE 或 _SBCS,这是 Visual Studio 本身的行为所致。预处理器定义不受 CMake 的建模,因此其他生成器(如 Ninja)不会添加此定义。
CMake 4.2 及以上版本,当目标为 MSVC ABI 时,所有生成器倾向于编译源代码并定义 _MBCS,除非找到其他字符集预处理器定义(_UNICODE 或 _SBCS)。此策略为未更新以识别此定义的项目提供了兼容性。其设置由每个创建的目标记录,并影响该目标中源代码的编译。
此策略的 OLD 行为不在 CMake 本身中建模 _MBCS 预处理器定义。此策略的 NEW 行为将 _MBCS 预处理器定义作为默认编码添加到源代码中,以目标为 MSVC ABI。
此策略是在 CMake 版本 4.2 中引入的。它可以通过 cmake_policy() 或 cmake_minimum_required() 进行设置。如果未设置,CMake **不会** 警告,并使用 OLD 行为。
注意
策略的 OLD 行为 根据定义已被弃用,并可能在未来的 CMake 版本中被移除。