Conan2:如何在CMake中读取bash脚本中的环境变量
在CMakeLists.txt中便捷获取Conan2自动生成的环境变量(如CONAN_PKG_ROOT)
方法一:直接通过Shell命令捕获变量(无需临时文件)
不用创建临时脚本,直接在CMakeLists.txt里通过execute_process调用bash,加载Conan的环境脚本后直接输出目标变量值,再捕获为CMake变量:
# 根据你的构建配置(Debug/Release、架构)调整脚本路径 set(CONAN_ENV_SCRIPT "${CMAKE_BINARY_DIR}/conanbuildenv-debug-armv8.sh") # 执行shell命令:加载环境脚本 -> 输出变量值 -> 捕获到CMake变量 execute_process( COMMAND bash -c "source ${CONAN_ENV_SCRIPT} && echo \$CONAN_PKG_ROOT" OUTPUT_VARIABLE CONAN_PKG_ROOT OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE EXEC_RESULT ) # 可选:检查命令执行是否成功 if(NOT EXEC_RESULT EQUAL 0) message(FATAL_ERROR "Failed to load Conan environment script or get CONAN_PKG_ROOT") endif() # 现在可以直接在CMake中使用这个变量了 message(STATUS "Conan package root directory: ${CONAN_PKG_ROOT}")
方法二:利用Conan的CMakeDeps原生集成(更推荐)
如果你的项目是通过Conan的CMakeDeps生成包配置,其实不需要依赖CONAN_PKG_ROOT这类通用变量,直接用Conan为每个包生成的<package-name>_ROOT变量即可,更精准也更符合Conan的设计逻辑:
# 先通过Conan生成的配置找到目标包(这里以"mypackage"为例) find_package(mypackage REQUIRED) # 直接获取该包的根路径 message(STATUS "MyPackage root directory: ${mypackage_ROOT}")
这种方式完全不需要手动处理环境脚本,依赖Conan的原生CMake集成能力,稳定性更高。
内容的提问来源于stack exchange,提问作者Zohar81
相关产品推荐
相关产品推荐

