非侵入式配置Conan作为CMake依赖工具适配CLion与CI流水线
关于Conan+CMake项目配置的问题解答
一、使用conanbuild.txt的方向是否正确?
这个方向正确且契合Conan 2.x+CMake的主流实践,核心优势如下:
- 提交静态
conanbuild.txt到仓库,能统一项目的依赖声明规则,避免不同开发者、CI环境因配置差异导致的依赖不一致问题。 - 采用手动执行
conan install的模式,让开发者和CI可以自主控制依赖安装时机,还能针对生产Debian、开发Ubuntu/Mac等不同环境定制编译选项。 - 配合
CMAKE_PROJECT_TOP_LEVEL_INCLUDES引入conan_provider.cmake,无需在CMakeLists.txt中硬编码依赖路径,CMake就能自动识别Conan生成的依赖信息,符合前瞻性的项目架构设计。
需要注意的细节:
conanbuild.txt里要明确指定profile、构建类型、依赖版本、编译选项等关键信息,示例如下:[settings] os=Linux compiler=gcc compiler.version=12 build_type=Release [requires] fmt/9.1.0 spdlog/1.11.0 [options] fmt:header_only=True- 不要将CLion插件自动生成的
conanbuild.py、conan_provider.cmake提交到仓库,这类文件应由conan install命令按需生成,避免环境差异导致的兼容性问题。
二、让CLion与Conan构建目录命名规则保持一致的方法
CLion默认构建目录格式为cmake-build-<build-type>(如cmake-build-release),Conan默认输出目录多为build/<profile>或自定义路径,可通过以下三种方式统一:
1. 让CLion适配Conan的默认目录
- 打开CLion的Settings/Preferences > Build, Execution, Deployment > CMake
- 在CMake options中添加:
-DCMAKE_BUILD_TYPE=<Build Type> -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES="conan_provider.cmake" - 在Build directory中手动指定为Conan的默认输出目录,比如:
这样CLion的构建目录就会和Conan的${PROJECT_DIR}/build/${CMAKE_BUILD_TYPE}build/Release、build/Debug保持一致。
2. 让Conan适配CLion的默认目录
在执行conan install时指定输出目录为CLion的格式:
conan install . --output-folder=cmake-build-debug --build=missing -s build_type=Debug conan install . --output-folder=cmake-build-release --build=missing -s build_type=Release
同时在CLion的CMake配置中,调整CMAKE_PROJECT_TOP_LEVEL_INCLUDES指向对应目录的conan_provider.cmake:
-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES="cmake-build-debug/conan_provider.cmake"
3. 统一使用自定义目录规则
定义跨平台通用的目录格式,比如build/<platform>-<build-type>,然后:
- 在CLion的CMake配置中,设置Build directory为:
${PROJECT_DIR}/build/${CMAKE_SYSTEM_NAME}-${CMAKE_BUILD_TYPE} - 执行
conan install时指定对应输出目录:
这种方式更适合多平台项目,能清晰区分不同操作系统的构建产物。conan install . --output-folder=build/Linux-Debug -s os=Linux -s build_type=Debug conan install . --output-folder=build/Darwin-Debug -s os=Macos -s build_type=Debug
内容的提问来源于stack exchange,提问作者bobah
相关产品推荐
相关产品推荐

