Conan2测试包阶段cojson::cojson目标找不到的问题排查
问题描述
使用Conan2构建cojson库时,库打包流程正常,但执行test_package时触发错误,提示找不到cojson::cojson目标,错误溯源至Conan生成的cmakedeps_macros.cmake文件。
已尝试的操作及结果:
- 将CMake目标
cojson_core的EXPORT_NAME设为cojson,同时在根conanfile.py的package_info中设置self.cpp_info.libs = ["cojson"],问题未解决。 - 创建目标别名
cojson::cojson_core后,目标可被识别,但出现头文件缺失错误;恢复PUBLIC_HEADER配置后,头文件问题解决。 - 再次将目标导出名改为
cojson,并在package_info中添加self.cpp_info.set_property("cmake_target_name", "cojson::cojson"),cojson::cojson目标找不到的错误再次出现。
解决方法
1. 同步CMake导出配置与Conan目标映射
在CMakeLists.txt中,确保导出目标的命名规则与Conan声明完全对齐:
add_library(cojson_core ...) # 设置EXPORT_NAME为cojson,同时指定公开头文件 set_target_properties(cojson_core PROPERTIES EXPORT_NAME cojson PUBLIC_HEADER "your_public_header_list.h" ) # 导出目标到CojsonTargets.cmake文件,命名空间设为cojson:: install(TARGETS cojson_core EXPORT CojsonTargets LIBRARY DESTINATION lib PUBLIC_HEADER DESTINATION include ) install(EXPORT CojsonTargets FILE CojsonTargets.cmake NAMESPACE cojson:: DESTINATION lib/cmake/Cojson )
2. 修正Conan package_info配置
在conanfile.py的package_info中,明确关联CMake导出的配置文件和目标名:
def package_info(self): self.cpp_info.libs = ["cojson"] # 指定CMake配置文件名,需与install(EXPORT)中的FILE前缀一致 self.cpp_info.set_property("cmake_file_name", "Cojson") # 匹配CMake导出的命名空间+EXPORT_NAME self.cpp_info.set_property("cmake_target_name", "cojson::cojson") # 配置Find模块的命名规则,确保find_package能识别 self.cpp_info.filenames["cmake_find_package"] = "Cojson" self.cpp_info.filenames["cmake_find_package_multi"] = "Cojson" self.cpp_info.names["cmake_find_package"] = "cojson" self.cpp_info.names["cmake_find_package_multi"] = "cojson"
3. 清理缓存并重新构建
Conan2的缓存可能残留旧配置,执行以下命令彻底清理后重新构建:
# 清理本地Conan缓存 conan remove "*" --force # 删除本地构建目录和test_package构建目录 rm -rf build test_package/build # 重新创建包并测试 conan create . --build=cojson
4. 验证test_package的CMake配置
确保test_package/CMakeLists.txt中正确查找并链接目标:
cmake_minimum_required(VERSION 3.15) project(test_package) find_package(Cojson REQUIRED) add_executable(${PROJECT_NAME} test_package.cpp) target_link_libraries(${PROJECT_NAME} PRIVATE cojson::cojson)
内容的提问来源于stack exchange,提问作者glades
相关产品推荐
相关产品推荐

