CMP0123

3.21 版本新增。

ARMClang CPU/架构编译和链接标志必须显式设置。

CMake 3.20 及更早版本会自动将 CMAKE_SYSTEM_PROCESSOR 变量和一个未公开的 CMAKE_SYSTEM_ARCH 映射到 ARMClang 的编译和链接选项。例如,当 CMAKE_SYSTEM_PROCESSOR 等于 cortex-m33 时,会添加 -mcpu=cortex-m33 标志。CMake 要求项目设置这两个变量中的一个,否则会引发致命错误。但是,项目可能需要使用例如 -mcpu=cortex-m33+nodsp 进一步指定 CPU 功能,这与 CMake 添加的 -mcpu=cortex-m33 冲突。这会导致链接错误或无法使用的二进制文件。

CMake 3.21 及更高版本更倾向于不自动添加任何 CPU/架构编译和链接标志。相反,项目必须显式地指定它们。此策略为尚未更新的项目提供兼容性。

此策略的 OLD 行为要求使用 ARMClang 的项目设置 CMAKE_SYSTEM_PROCESSORCMAKE_SYSTEM_ARCH,并且它会自动添加基于这些变量的编译选项 -mcpu=-march= 以及链接选项 --cpu=NEW 行为不会添加编译或链接选项,项目负责设置正确的选项。

此策略在 CMake 版本 3.21 中引入。它可以通过 cmake_policy()cmake_minimum_required() 命令设置。如果未设置,CMake 会发出警告并使用 OLD 行为。

注意

策略的 OLD 行为根据定义已被弃用,并可能在未来版本的 CMake 中被移除。