CMAKE_CROSSCOMPILING

旨在表明 CMake 是否正在交叉编译,但请注意下面讨论的限制。

如果 CMAKE_SYSTEM_NAME 变量已被手动设置(即在工具链文件中或作为来自 cmake 命令行的缓存条目),则此变量将由 CMake 设置为 true .在大多数情况下,手动设置 CMAKE_SYSTEM_NAME 只会在交叉编译时完成,因为如果不手动设置,它将被赋予与 CMAKE_HOST_SYSTEM_NAME 相同的值,这对于非交叉编译是正确的编译案例。如果 CMAKE_SYSTEM_NAME 手动设置为与 CMAKE_HOST_SYSTEM_NAME 相同的值,则 CMAKE_CROSSCOMPILING 仍将设置为 true。

另一种需要注意的情况是,针对 macOS 以外的 Apple 平台构建的处理方式与其他交叉编译场景不同。 Apple 设备构建不是依赖 CMAKE_SYSTEM_NAME 选择目标平台,而是使用 CMAKE_OSX_SYSROOT 选择合适的 SDK,间接确定目标平台。此外,当使用 Xcode 生成器时,开发人员可以在构建时在设备构建和模拟器构建之间切换,而不是在配置时只能进行单一选择,因此构建是否交叉编译的概念更加复杂。因此,不建议针对 Apple 设备的项目使用 CMAKE_CROSSCOMPILING