如何在test_package配方中将Conan生成的CMake变量添加到LD_LIBRARY_PATH
解决方案
你不需要尝试读取CMake域的CONAN_LIB_DIRS_XXXXX变量,该变量仅在CMake运行上下文生效,Conan配方本身有原生途径可以获取对应依赖的库路径并注入到运行环境中,以下是两种可行实现:
方法1:Conan 2.x 推荐写法(使用官方环境工具)
直接通过RunEnvironment工具自动注入依赖库路径到LD_LIBRARY_PATH,无需手动拼接变量:
from conan.tools.env import RunEnvironment def test(self): # 生成包含所有依赖库路径的运行环境 run_env = RunEnvironment(self).environment() # 如果仅需添加指定依赖XXXXX的库路径,可替换为以下写法 # run_env.prepend("LD_LIBRARY_PATH", self.deps_cpp_info["XXXXX"].libdirs) with run_env.vars(self).apply(): self.run("./example")
这种写法会自动处理多依赖路径拼接、跨平台兼容逻辑,无需额外判断系统环境。
方法2:Conan 1.x 兼容写法
直接手动修改运行时环境变量:
import os def test(self): # 获取对应依赖XXXXX的库路径,XXXXX替换为存放MKL库的依赖包名称 mkl_lib_dir = self.deps_cpp_info["XXXXX"].lib_paths[0] # 注入到LD_LIBRARY_PATH头部 os.environ["LD_LIBRARY_PATH"] = mkl_lib_dir + os.pathsep + os.environ.get("LD_LIBRARY_PATH", "") self.run("./example")
两种方法获取到的依赖库路径和CONAN_LIB_DIRS_XXXXX的值完全一致,都可以解决运行时找不到MKL共享库的问题。
内容的提问来源于stack exchange,提问作者user2311285
相关产品推荐
相关产品推荐

