最稳起点是用conan new mylib/1.0.0 -t生成带测试的完整骨架,再修改conanfile.py中的name、version、exports_sources和package_info.libs四项关键字段,并注意source()/build()/package()路径与缓存刷新问题。

直接用 conan new 生成骨架,再改 conanfile.py,别手写空文件——这是最稳的起点。
执行 conan new 命令生成初始结构
在你准备打包的代码目录(比如 mylib/)外层新建一个空目录,进入后运行:
conan new mylib/1.0.0 -t
这会生成带测试模板的完整结构:mylib/ 子目录含 conanfile.py、src/、test_package/ 等。关键点:
-
-t参数自动加测试包,能立刻验证包是否可被正常消费 - 生成的
conanfile.py已预设settings、options、exports_sources和基础build()/package()方法 - 若源码已在别处(如 Git 仓库),可删掉自动生成的
src/,改在source()方法里用git clone或tools.get()拉取
conanfile.py 必须改的三处字段
生成的模板只是起点,不改这三项就无法正确构建或链接:
-
name和version:必须和命令中一致(如mylib/1.0.0),否则conan create会报ERROR: Package 'mylib/1.0.0' not found -
exports_sources:改成你实际源码路径,例如exports_sources = "src/*", "include/*";若用source()下载远程代码,则此项留空或删掉 -
package_info()中的self.cpp_info.libs:填最终生成的库名(如["mylib"]),不是头文件名或项目名;静态库、动态库名不一致时要按package()里实际拷贝的文件名来写
conan create 构建时常见失败原因
运行 conan create . --build=missing 后报错,多数卡在这几个地方:
-
source() failed:检查tools.get()的 URL 是否可访问,或git clone是否需要 token;Windows 上路径含空格会导致cmake.configure()找不到源目录 -
build() failed:确认CMakeLists.txt能独立编译;Conan 默认传-DCMAKE_BUILD_TYPE=Release,若项目只支持Debug,得加-s build_type=Debug -
package() failed:self.copy()的src路径是相对于source_folder(即source()解压/克隆后的位置),不是项目根目录;漏写keep_path=False会导致头文件路径嵌套过深,下游find_package()找不到
最容易被忽略的是:每次改完 conanfile.py 后,conan create 默认仍用旧缓存。强制重装得加 --build=missing --clean-cache,或者手动删 ~/.conan2/p/ 下对应包 ID 目录——不然你以为改了,其实跑的还是上次的二进制。


















