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

使用Conan+CMake构建C++项目时提示找不到RmlUi头文件

问题根因
  • 构建流程不规范,使用源码内编译且目录不统一:conan install指定将工具链、依赖CMake配置文件全部输出到cmake-build-release目录,但你直接在项目根目录执行cmake .做源码内构建,生成的CMake缓存很容易出现路径不匹配、旧配置覆盖Conan工具链参数的问题,导致CMakeDeps生成的rmlui依赖配置没有被正确加载。
  • find_package缺少REQUIRED约束:就算CMake没找到Conan安装的rmlui,配置阶段也不会直接报错终止,直到编译阶段才发现没有添加rmlui的头文件搜索路径,触发找不到RmlUi/Core.h的错误。
  • 额外注意:你代码中引用的Backends/RmlUi_Backend.h、Shell/Shell.h是RmlUi官方示例的私有组件,ConanCenter的正式rmlui包不会随安装包部署这部分内容,解决Core.h的问题后需要单独处理这部分依赖。
修复步骤
  1. 先清理源码根目录下之前源码内编译生成的缓存,避免旧配置干扰:
rm -rf CMakeCache.txt CMakeFiles/
  1. 保持原有conan安装命令即可,所有依赖生成文件统一输出到独立构建目录cmake-build-release:
conan install . --install-folder cmake-build-release --build=missing
  1. 执行CMake配置时,显式指定构建目录、源码目录,不要在源码根目录直接生成构建文件:
cmake -B cmake-build-release -S . -DCMAKE_TOOLCHAIN_FILE=cmake-build-release/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release

这一步执行时CMake会自动读取Conan工具链中配置的依赖搜索路径,正确加载rmlui的依赖配置,自动添加头文件搜索路径、链接库路径。
4. 编译时指定对应构建目录即可:

cmake --build cmake-build-release
优化建议

建议把CMakeLists.txt中的find_package行加上REQUIRED关键字,后续如果依赖加载失败,会在CMake配置阶段直接报错,不会拖到编译阶段才暴露问题,修改后对应内容为:

find_package(rmlui REQUIRED)

如果修复后编译提示找不到Backends/RmlUi_Backend.h和Shell/Shell.h,直接把RmlUi源码中对应Backends、Shell目录下的源码拷贝到自身项目中作为项目源码编译即可,ConanCenter的rmlui包默认不会打包这部分示例组件。


内容的提问来源于stack exchange,提问作者Nils van Lück

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:21:07