You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:16:11