【问题标题】:How can conan help CMake find location of DLLs?柯南如何帮助 CMake 找到 DLL 的位置?
【发布时间】:2019-07-12 13:02:48
【问题描述】:

我有一个创建共享库的项目。该项目使用 conan 来管理其依赖项,其中之一是 OpenCV。由于公司政策,我们不使用 opencv_world 并始终使用共享库,因此柯南安装了数百个 .lib.dll 文件。

我正在开发的项目包括许多用于运行测试的可执行文件——单元、集成、配置文件等,但这些测试需要具有依赖项的 dll 的路径。我的问题是,如何管理这些路径?

有没有办法自动将文件的位置从柯南传递给 cmake?

我是否应该手动找到文件的位置并手动将它们传递给 CMake?

【问题讨论】:

  • 您目前是否已经在使用CMake generator
  • 是的,但不知道它将如何为我提供 DLL 的路径。
  • 库路径应该是生成目标的属性,因为编译器也需要这些路径。然后您可以使用get_target_property 提取路径。不幸的是,我手头没有柯南装置可供测试。
  • 我需要将 DLL 本身复制到我的单元测试所在的同一文件夹中,否则它们将无法运行,如问题所述。
  • 加载外部 dll-s 的单元测试不是单元测试。您应该使用依赖注入。集成/功能测试将所有内容作为一个整体运行,它们正在加载依赖项(dll)。

标签: c++ cmake conan


【解决方案1】:

这就是我所做的:

1) 将 conan 项目生成器更改为 virtualrunenv 并按照文档安装包。

2) 启动developer prompt,或从任何命令行窗口执行它在启动时运行的脚本。

3) 从 Visual Studio 打开 CMake 项目。

4) 运行测试。现在所有库都可用。

【讨论】:

    【解决方案2】:

    必须成功找到opencv,才能获取缓存的相关cmake变量。从这些变量之一(通过在您的 cmake 文件中编写脚本)获取 opencv 的 dll 路径,并将其写入 .bat(windows)或 .sh(linux/mac)文件。该shell脚本文件应暂时将dll路径添加到PATH变量,然后进行单元测试。不确定这是否依赖于柯南,因为我从不使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多