CMake Warning (dev) at CMakeLists.txt:15 (find_package): Policy CMP0074 is not set: find_package uses <PackageName>_ROOT variables. Run "cmake --help-policy CMP0074" for policy details. Use the cmake_policy command to set the policy and suppress this warning. CMake variable PCL_ROOT is set to: /usr For compatibility, CMake is ignoring the variable. This warning is for project developers. Use -Wno-dev to suppress it.
时间: 2025-07-05 19:57:21 浏览: 14
<think>嗯,用户遇到了CMake的CMP0074策略警告,需要解决这个问题。首先,我得回忆一下CMake策略的相关知识。CMP0074是关于如何处理find_package命令中的<PackageName>_ROOT变量的策略。旧版本的CMake可能会忽略这个变量,而新版本则开始支持,所以当用户设置了这个变量但CMake版本较低时,就会产生警告。
用户提到的警告信息可能类似于“Policy CMP0074 is not set:...”,这说明用户的项目中使用了某些依赖包,并且可能设置了类似PCL_ROOT的环境变量或CMake变量,但CMake的策略没有正确配置来处理这个变量。根据引用[3],解决类似策略警告的方法是在CMakeLists.txt中显式设置策略版本。例如,添加cmake_policy(SET CMP0148 OLD)来覆盖警告,但这里的问题是关于CMP0074,所以需要相应的策略设置。
接下来,我需要确定具体的解决步骤。根据CMake文档,CMP0074的策略在3.12及更高版本中引入,默认行为是NEW,即使用<PackageName>_ROOT变量。如果用户希望保持旧的行为,可能需要将策略设置为OLD,或者更新他们的CMake脚本来适应新的行为。
可能的解决方案包括:1. 在CMakeLists.txt中显式设置策略CMP0074为NEW或OLD,取决于用户的需求。2. 确保正确设置PCL_ROOT变量,指向PCL的安装路径。3. 检查CMake版本是否过低,考虑升级到支持该策略的版本。
另外,用户可能混淆了PCL_ROOT和传统的CMAKE_PREFIX_PATH的使用。根据引用[2]和[4],find_package的搜索路径可能涉及多个目录,包括通过CMAKE_MODULE_PATH、CMAKE_PREFIX_PATH以及特定包的_ROOT变量。需要指导用户正确设置这些变量,或者调整策略以消除警告。
最后,生成的相关问题需要考虑用户可能遇到的类似策略警告,或者与find_package相关的其他问题,比如路径配置、不同CMake命令的区别等。</think>### 解决CMake CMP0074策略警告的步骤
#### 1. **理解警告原因**
- **CMP0074策略**:当使用`find_package()`时,若设置了`<PackageName>_ROOT`变量(如`PCL_ROOT`),CMake会优先使用该路径搜索包。旧版本CMake(<3.12)可能忽略此变量,导致警告[^2][^4]。
- **触发条件**:项目中存在类似`set(PCL_ROOT "/path/to/pcl")`的配置,但未显式声明策略版本。
#### 2. **显式设置策略**
在项目的`CMakeLists.txt`中添加以下内容,强制指定策略行为:
```cmake
if(POLICY CMP0074)
cmake_policy(SET CMP0074 NEW) # 启用新行为(推荐)
# 或 cmake_policy(SET CMP0074 OLD) # 保持旧行为
endif()
```
- **NEW行为**:遵循`<PackageName>_ROOT`变量。
- **OLD行为**:忽略`<PackageName>_ROOT`变量[^3]。
#### 3. **验证路径配置**
- 确保`PCL_ROOT`指向正确的PCL安装目录:
```cmake
set(PCL_ROOT "/usr/local/PCL-1.12") # 示例路径
```
- 或通过命令行传递:
```bash
cmake -DPCL_ROOT=/path/to/pcl ..
```
#### 4. **替代方案(兼容旧版本)**
- 使用`CMAKE_PREFIX_PATH`代替`PCL_ROOT`:
```cmake
list(APPEND CMAKE_PREFIX_PATH "/path/to/pcl")
```
该变量被所有版本的CMake广泛支持[^2]。
#### 5. **升级CMake版本**
- 若CMake版本低于3.12,建议升级至3.12+以原生支持CMP0074:
```bash
sudo apt-get install cmake=3.22.1 # Ubuntu示例
```
#### 示例完整配置
```cmake
cmake_minimum_required(VERSION 3.12) # 确保版本兼容
project(MyProject)
# 显式设置策略
if(POLICY CMP0074)
cmake_policy(SET CMP0074 NEW)
endif()
set(PCL_ROOT "/opt/pcl-1.12") # 指定PCL路径
find_package(PCL REQUIRED) # 调用查找
```
---
阅读全文
相关推荐
















