设置好CMakeLists.txt后再次连接时出现CMake Deprecation Warning at external/cnpy/CMakeLists.txt:1 (CMAKE_MINIMUM_REQUIRED): Compatibility with CMake < 3.5 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. CMake Error at /usr/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake:230 (message): Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR) Call Stack (most recent call first): /usr/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE) /usr/share/cmake-3.28/Modules/FindZLIB.cmake:199 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) external/cnpy/CMakeLists.txt:12 (find_package) -- Configuring incomplete, errors occurred!的报错该怎么办
时间: 2025-07-19 22:32:57 浏览: 2
<think>我们遇到了两个问题:一个是CMake的过时警告(Deprecation Warning),另一个是找不到ZLIB库的错误(CMake Error)。
1. 过时警告:因为cnpy项目的CMakeLists.txt中指定了较低的CMake最低版本要求(<3.5),而新版本的CMake不再支持旧版本的兼容性。可以通过修改该CMakeLists.txt文件提高最低版本要求或添加兼容性后缀来解决。
2. 找不到ZLIB库:项目依赖ZLIB,但CMake在系统中找不到它。需要安装ZLIB的开发包,或者如果已经安装但CMake找不到,则可能需要设置ZLIB的路径。
具体步骤:
一、解决CMake过时警告(Deprecation Warning):
打开文件 `external/cnpy/CMakeLists.txt`,找到第一行,通常类似于:
cmake_minimum_required(VERSION 2.8)
修改为:
cmake_minimum_required(VERSION 3.5) # 或者你当前使用的CMake版本(如3.10),但不要超过你实际安装的版本
或者,如果你希望保持向后兼容性,但避免警告,可以这样写(3.5到当前版本):
cmake_minimum_required(VERSION 3.5...3.28) # 假设你使用的是3.28,根据实际情况修改上限
注意:这个修改可能会影响cnpy的兼容性,如果cnpy本身不支持高版本的CMake,你可能需要升级cnpy或寻找替代方案。
二、解决找不到ZLIB库的问题:
1. 确保已经安装了ZLIB的开发包。在Ubuntu/WSL中,可以运行:
sudo apt-get install zlib1g-dev
2. 如果已经安装,但CMake仍然找不到,可以尝试在CMake命令中指定ZLIB的路径。例如:
cmake .. -DZLIB_ROOT=/usr/lib/x86_64-linux-gnu/ # 或者实际安装路径
3. 或者,在CMakeLists.txt中(在`find_package(ZLIB REQUIRED)`之前)设置ZLIB_DIR变量,例如:
set(ZLIB_DIR /usr/lib/x86_64-linux-gnu/cmake/ZLIB) # 具体路径可能不同,需要根据系统查找
4. 如果项目中的cnpy是作为子模块引入的,你也可以考虑在项目的顶层CMakeLists.txt中帮助找到ZLIB,例如:
find_package(ZLIB REQUIRED)
include_directories(${ZLIB_INCLUDE_DIRS})
# 然后在cnpy的CMakeLists.txt中注释掉它自己的find_package(ZLIB)(如果可能)
5. 另外,检查cnpy的CMakeLists.txt(在external/cnpy/CMakeLists.txt)中关于ZLIB的部分,确保它正确使用了找到的ZLIB。
三、如果以上步骤无法解决,可以尝试以下通用方法:
- 清除构建目录并重新生成:删除build目录,重新创建并运行cmake。
- 更新CMake:确保你的CMake版本足够新(但不要过新导致不兼容)。
由于错误发生在cnpy的CMakeLists.txt中,如果这个cnpy是第三方库,你也可以考虑更新cnpy到最新版本,因为它可能已经修复了这个问题。
操作步骤总结:
1. 修改cnpy的CMakeLists.txt中的最低CMake版本。
2. 安装zlib1g-dev。
3. 重新运行cmake。
如果问题依旧,尝试指定ZLIB的路径。
注意:在修改第三方库(cnpy)的CMakeLists.txt时,要考虑到后续更新可能会覆盖你的修改。如果这是一个通过git子模块引入的项目,你可能需要提交修改到本地或者考虑使用补丁。
根据报错信息,错误发生在cnpy的CMakeLists.txt的第12行(find_package(ZLIB)),所以确保在运行之前已经安装了ZLIB开发包。
最后,重新运行cmake:
cd build
cmake ..
如果还有问题,请提供更多信息,例如你的系统环境(WSL的发行版)和安装的软件包版本。</think>### 问题分析
该错误包含两个关键问题:
1. **CMake 版本警告**:`cnpy` 子模块要求的最低 CMake 版本过低(低于 3.5),需要更新兼容性设置
2. **ZLIB 缺失错误**:项目依赖 ZLIB 库,但 CMake 找不到其开发文件(头文件和库文件)
### 解决方案
#### 步骤 1:解决 CMake 版本警告
修改 `external/cnpy/CMakeLists.txt` 文件:
```cmake
# 原内容可能是:
# cmake_minimum_required(VERSION 2.8)
# 修改为(保持与主项目一致):
cmake_minimum_required(VERSION 3.5) # 或使用您主项目的版本
```
#### 步骤 2:安装 ZLIB 开发包
在 WSL 终端执行:
```bash
sudo apt update
sudo apt install zlib1g-dev # 安装 ZLIB 开发文件
```
#### 步骤 3:验证 ZLIB 安装
```bash
# 检查头文件
ls /usr/include/zlib.h
# 检查库文件
ls /usr/lib/x86_64-linux-gnu/libz.so
```
#### 步骤 4:强制 CMake 重找 ZLIB
在 CMake 命令中添加 ZLIB 路径参数:
```bash
cmake .. \
-DZLIB_INCLUDE_DIR=/usr/include \
-DZLIB_LIBRARY=/usr/lib/x86_64-linux-gnu/libz.so
```
#### 替代方案:禁用 cnpy 的 ZLIB 依赖(不推荐)
如果不需要 cnpy 功能:
```cmake
# 在顶层 CMakeLists.txt 添加
set(CNPY_BUILD_TESTS OFF CACHE BOOL "Disable tests")
set(CNPY_ENABLE_ZLIB OFF CACHE BOOL "Disable ZLIB")
```
#### 步骤 5:清理并重建
```bash
rm -rf CMakeCache.txt CMakeFiles # 清理缓存
cmake --build . --target clean # 清理构建
cmake .. # 重新配置
```
### 预防措施
1. 在项目顶层 CMakeLists.txt 中添加:
```cmake
find_package(ZLIB REQUIRED) # 提前检查依赖
include_directories(${ZLIB_INCLUDE_DIRS})
```
2. 更新子模块的 CMake 要求:
```cmake
cmake_minimum_required(VERSION 3.5...3.28) # 兼容当前版本
```
阅读全文
相关推荐

















