查询CMAKE_SYSTEM_NAME与CMAKE_SYSTEM_PROCESSOR可选取值及CMake官方文档
CMake交叉编译核心变量取值参考
CMAKE_SYSTEM_NAME取值规则
这个变量的核心作用是触发CMake加载对应目标系统的内置平台规则,不存在官方强制穷举的固定合法列表,已被CMake广泛适配的常见取值包括:
- 通用操作系统类:
Linux:所有类Linux内核的目标系统Windows:所有Windows桌面/服务端目标系统,不存在单独的特殊命名Darwin:macOS、iOS等苹果生态目标系统FreeBSD、NetBSD:对应BSD衍生系统Android:安卓嵌入式目标系统Generic:无操作系统的裸机嵌入式目标
- 工业级嵌入式系统:
QNX、VxWorks、ThreadX
*取值本质是匹配CMake内置的平台规则模块,如果你自行编写了对应系统的规则文件,自定义的系统名称也可以被正常识别使用。
CMAKE_SYSTEM_PROCESSOR取值规则
这个变量的核心作用是标识目标硬件架构,同样没有强制的取值白名单,常见的主流架构取值包括:
- x86生态:
x86:32位x86架构x86_64、AMD64:64位x86架构,两种命名在不同平台下均被支持
- ARM生态:
arm:32位ARM架构,可进一步细化为armv6、armv7-a等带版本后缀的取值arm64、aarch64:64位ARM架构,两种命名均被当前CMake版本兼容
*部分旧版本CMake会自动兼容取值的大小写、命名差异,不会因为大小写不同直接抛出识别错误。
关于官方文档的说明
CMake官方文档仅明确了两个变量的核心作用,没有维护固定的全量取值列表章节,本质是因为这两个变量的设计逻辑面向可扩展的平台模块体系,而非封闭的固定取值集合:只要对应平台、架构的适配规则存在(不管是CMake内置的还是用户自行编写的),合法取值的范围就会同步扩展,不存在一劳永逸的穷举列表。
实际使用提示
对于GCC、Clang及对应ARM交叉工具链的配置场景,取值不需要严格对照所谓的官方固定列表,只要和工具链实际的目标三元组匹配即可。例如aarch64-linux-gnu交叉工具链,对应的配置就是将
CMAKE_SYSTEM_NAME设为Linux、CMAKE_SYSTEM_PROCESSOR设为aarch64,即可正常完成交叉编译配置。
内容的提问来源于stack exchange,提问作者user654789384
相关产品推荐
相关产品推荐

