# CMake 错误：CMAKE_CROSSCOMPILING 为 TRUE，但未设置 CMAKE_SYSTEM_NAME。

- **ID:** `cmake/cross-compiling-toolchain-cmake-variable-not-set`
- **领域:** cmake
- **类别:** config_error
- **验证级别:** ai_generated
- **修复率:** 82%

## 根因

在进行交叉编译时，CMake 需要在工具链文件或命令行中设置 CMAKE_SYSTEM_NAME，否则默认为主机系统，导致不匹配。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| cmake 3.22 | active | — | — |
| cmake 3.25 | active | — | — |
| cmake 3.28 | active | — | — |

## 解决方案

1. ```
   在工具链文件中设置 CMAKE_SYSTEM_NAME，例如 set(CMAKE_SYSTEM_NAME Linux)。然后通过 -DCMAKE_TOOLCHAIN_FILE=/path/to/toolchain.cmake 传递工具链文件。
   ```
2. ```
   或者在命令行中设置 CMAKE_SYSTEM_NAME：cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc ..
   ```

## 无效尝试

- **Setting CMAKE_CROSSCOMPILING to FALSE manually in CMakeLists.txt** — Overriding CMAKE_CROSSCOMPILING is a read-only variable; CMake ignores user attempts to set it. (95% 失败率)
- **Adding set(CMAKE_SYSTEM_NAME Linux) in CMakeLists.txt instead of toolchain file** — CMAKE_SYSTEM_NAME must be set before the project() call; CMakeLists.txt executes after, so it has no effect. (90% 失败率)
