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