如何在Conan2中实现conan_cmake_run()的类似功能?
Conan2 替代
conan_cmake_run() 的方案 Conan2 移除了 conan_cmake_run() 函数,官方推荐采用命令行前置执行或CMake内联调用Conan命令的方式替代,以下是具体方案:
方案一:官方推荐的命令行+CMakeToolchain 流程
这是Conan2官方主推的方式,将依赖安装与CMake配置分离,逻辑更清晰可控:
- 在项目根目录执行Conan安装命令(默认读取当前目录的
conanfile.txt):
若需要指定编译配置(如Debug/Release、编译器版本),可搭配profile文件:conan install . --output-folder=build --build=missingconan install . --output-folder=build --build=missing --profile:build=default --profile:host=my_profile - 在
CMakeLists.txt中引入Conan生成的工具链文件,注意要放在project()命令之前:cmake_minimum_required(VERSION 3.15) # 引入Conan工具链 include(${CMAKE_BINARY_DIR}/conan_toolchain.cmake) project(MyProject) # 后续正常添加目标、链接依赖 add_executable(my_app src/main.cpp) target_link_libraries(my_app PRIVATE ${CONAN_LIBS})
方案二:CMake内联调用Conan命令(类似旧版行为)
如果希望保持类似conan_cmake_run()的「CMake配置时自动安装依赖」逻辑,可以用execute_process在CMake中直接调用Conan命令:
cmake_minimum_required(VERSION 3.15) # 在CMake配置阶段执行Conan安装 execute_process( COMMAND conan install . --output-folder=${CMAKE_BINARY_DIR} --build=missing WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} RESULT_VARIABLE CONAN_INSTALL_RESULT ) # 检查Conan执行状态 if(NOT CONAN_INSTALL_RESULT EQUAL 0) message(FATAL_ERROR "Conan依赖安装失败") endif() # 引入工具链文件 include(${CMAKE_BINARY_DIR}/conan_toolchain.cmake) project(MyProject) add_executable(my_app src/main.cpp) target_link_libraries(my_app PRIVATE ${CONAN_LIBS})
补充说明
- Conan2 完全兼容
conanfile.txt,无需强制切换到conanfile.py,但官方更推荐后者以获得更灵活的依赖管理能力。 - 若使用多配置生成器(如Visual Studio),需在Conan命令中指定
--settings build_type=Debug/Release,或通过profile统一管理编译配置。
内容的提问来源于stack exchange,提问作者Popnut
相关产品推荐
相关产品推荐

