CMAKE_CROSSCOMPILING¶
CMake 会将此变量设置为 true 以指示它是否正在执行交叉编译,但请注意以下所讨论的限制。
如果 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,而 SDK 间接确定目标平台。此外,在使用 Xcode
生成器时,开发人员可以在构建时在设备和模拟器构建之间切换,而不是在配置时仅提供一种选择,因此构建是交叉编译还是不是的概念更加复杂。因此,不建议针对 Apple 设备的项目使用 CMAKE_CROSSCOMPILING
。