# CMake 错误：未设置策略 CMP0074：find_package 使用 <PackageName>_ROOT 变量。运行 "cmake --help-policy CMP0074" 查看策略详情。

- **ID:** `cmake/policy-cmp0074-not-set-find-package`
- **领域:** cmake
- **类别:** config_error
- **错误码:** `CMP0074`
- **验证级别:** ai_generated
- **修复率:** 95%

## 根因

CMake 3.12+ 引入了新策略 CMP0074，用于控制 find_package 是否遵循 <PackageName>_ROOT 环境变量。如果未显式设置该策略，CMake 会报错以强制开发者决定。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| cmake 3.12 | active | — | — |
| cmake 3.15 | active | — | — |
| cmake 3.20 | active | — | — |
| cmake 3.25 | active | — | — |

## 解决方案

1. ```
   在任何 find_package 调用之前添加：cmake_policy(SET CMP0074 NEW) 以启用新行为。
   ```
2. ```
   添加 cmake_policy(SET CMP0074 OLD) 以使用旧行为（忽略 <PackageName>_ROOT）。
   ```
3. ```
   设置 cmake_minimum_required(VERSION 3.11) 以完全避免该策略，但这可能不适用于现代项目。
   ```

## 无效尝试

- **** — CMAKE_POLICY_DEFAULT_CMP0074 is a variable, not a policy command. Must use cmake_policy(SET CMP0074 NEW) explicitly. (70% 失败率)
- **** — Without policy set, CMake will still error out. The policy must be set before find_package. (95% 失败率)
- **** — Policy CMP0074 exists in 3.12+; using an older version may suppress the error but also lose new features. Not a proper fix. (50% 失败率)
