GitHub Actions Ubuntu运行器中Conan依赖包找不到触发find_package报错
问题核心原因
你本地Linux环境预先安装了系统级的docopt开发包,所以CMake的find_package可以直接找到系统路径下的配置文件;而GitHub Action的Ubuntu运行器是纯净环境,只有Conan安装的依赖,但你当前的Conan配置和CMake逻辑不匹配,导致CMake无法找到Conan安装的docopt配置。
另外你已经使用了Conan的cmake生成器,并且调用了conan_basic_setup(),Conan已经自动完成了所有依赖的头文件路径、库路径、链接参数的配置,完全不需要额外调用find_package查找依赖。
解决方案
方案一(最简便,推荐)
直接删除CMakeLists.txt里的两行find_package代码即可:
# 删除下面两行 find_package(docopt COMPONENTS CXX REQUIRED) find_package(SQLite3)
删除后Conan会自动处理所有依赖的链接和引入,本地和CI环境都可以正常运行。
方案二(需要保留find_package逻辑)
如果你的项目必须使用find_package管理依赖,修改两处配置即可:
- 修改
conanfile.txt的generators配置,新增cmake_find_package生成器:
[requires] docopt.cpp/0.6.3 sqlite3/3.36.0 [generators] cmake cmake_find_package
- 修改CMakeLists.txt里的
find_package调用,包名和Conan中的依赖名保持一致:
# 把docopt改为docopt.cpp,和Conan里的依赖名匹配 find_package(docopt.cpp COMPONENTS CXX REQUIRED) find_package(SQLite3 REQUIRED)
额外注意事项
如果修改后还是报错,可以在CI的Conan安装步骤加上参数指定生成和宿主配置,避免Conan默认配置和编译配置不匹配:
conan install .. --build missing -s build_type=${{env.BUILD_TYPE}}
内容的提问来源于stack exchange,提问作者Jonathan Gzz
相关产品推荐
相关产品推荐

