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
。