使用Conan安装Poco后CMake无法找到Poco::Foundation目标怎么办
问题原因及解决方案
你遇到的找不到Poco::Foundation目标的问题,本质是find_package调用方式和Conan生成器的目标暴露规则不匹配导致的,按以下步骤修改即可:
第一步:修改CMakeLists.txt的find_package调用
默认情况下,find_package(Poco)仅会暴露全局聚合目标Poco::Poco,不会导出单个组件的独立目标。你需要明确声明需要加载Foundation组件:
# 替换原来的find_package(Poco)和对应的判断逻辑 find_package(Poco REQUIRED COMPONENTS Foundation) if(NOT TARGET Poco::Foundation) message(FATAL_ERROR "Poco::Foundation target not found") endif()
修改后直接保留target_link_libraries(ExamplePlugin PUBLIC jd::Core Poco::Foundation)即可。
第二步:如果仍找不到目标,做以下两个排查/修改:
- 如果你使用的是Conan 1.x的旧版
cmake_find_package生成器,部分版本的Poco配方会将单个组件的目标命名为Poco::PocoFoundation,你可以尝试把链接目标替换为Poco::PocoFoundation验证。 - 更推荐你将Conan生成器替换为适配性更好的
CMakeDeps,只需要修改conanfile.py中的generators配置即可:
该生成器导出的目标命名和Poco官方CMake配置完全一致,直接使用# 替换原来的 generators = "cmake_find_package" generators = "CMakeDeps"Poco::Foundation即可正常链接。
补充说明
你当前的conanfile.py中已经禁用了所有Poco非必要组件,就算继续使用Poco::Poco目标链接,实际也不会引入多余的依赖库,因为Poco构建时不会生成你禁用的组件对应的库文件。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

