CLion中CMake报错:未找到log4cppD包,求技术解决方案
CMake找不到log4cppD库的排查与解决
问题重现
在CLion中结合Conan使用CMake构建项目时,触发如下报错:
CMake Error at cmakedeps_macros.cmake:67 (message):
Library 'log4cppD' not found in package. If 'log4cppD' is a system
library, declare it with 'cpp_info.system_libs' property
对应的conanfile.py代码片段:
def package_info(self): self.cpp_info.set_property("cmake_find_mode", "both") if self.settings.build_type == "Debug": self.cpp_info.libs = ["log4cppD"] else: self.cpp_info.libs = ["log4cpp"] if self.settings.os == "Linux": self.cpp_info.system_libs.append("pthread")
排查与解决方法
1. 验证Debug库文件的实际存在性
先确认Conan下载/构建的log4cpp包中,Debug模式下是否真的生成了log4cppD库:
- 找到Conan包存储路径(默认Linux为
~/.conan/data,Windows为C:\Users\<用户名>\.conan\data) - 定位到log4cpp包的Debug构建目录,检查
lib文件夹下是否存在对应库文件:Windows下为log4cppD.lib,Linux下为liblog4cppD.so/liblog4cppD.a
如果库文件不存在,说明log4cpp的Debug构建未生成带D后缀的库,需修改包构建配置,或直接使用无后缀的Debug库名。
2. 修正Conan包信息的库名配置
若实际Debug库的命名不是log4cppD(比如部分环境下后缀为_d,或无后缀),调整conanfile.py中的库名:
def package_info(self): self.cpp_info.set_property("cmake_find_mode", "both") if self.settings.build_type == "Debug": # 根据实际库名调整,示例改为带下划线后缀的版本 self.cpp_info.libs = ["log4cpp_d"] else: self.cpp_info.libs = ["log4cpp"] if self.settings.os == "Linux": self.cpp_info.system_libs.append("pthread")
3. 适配不同操作系统的库命名规则
Windows下Debug库通常带D后缀,但Linux/macOS下多数库的Debug版本不会加后缀,而是通过目录区分。可针对系统做精细化配置:
def package_info(self): self.cpp_info.set_property("cmake_find_mode", "both") if self.settings.build_type == "Debug": if self.settings.os == "Windows": self.cpp_info.libs = ["log4cppD"] else: # Linux/macOS下Debug库名与Release一致 self.cpp_info.libs = ["log4cpp"] else: self.cpp_info.libs = ["log4cpp"] if self.settings.os == "Linux": self.cpp_info.system_libs.append("pthread")
4. 清理缓存后重新构建
如果使用Conan 2.x,可能存在缓存导致的信息不一致问题,清理后重新执行构建流程:
# 清理log4cpp相关缓存 conan cache clean log4cpp* # 删除CMake构建目录 rm -rf build/ # Linux/macOS # Windows系统执行 rmdir /s /q build
之后重新运行Conan安装和CMake配置命令。
内容的提问来源于stack exchange,提问作者AgonLat
相关产品推荐
相关产品推荐

