【问题标题】:Correct way to build OpenCV as a third party library along with your project in CMAKE将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
【发布时间】:2020-06-01 06:14:41
【问题描述】:

我有一个 C++ 项目,我在其中使用 opencv、VTK。我想自动构建和安装这些依赖库(opencv、vtk),它们位于我的第三方项目文件夹中。我知道 opencv 和 VTK 使用 cmake 构建系统来构建他们的库。我什至看到函数 ExternalProject 将它们添加到我的 CMakesLists.txt 但我在将目标与 opencv 库链接时遇到了问题。

搜索堆栈溢出时,我找不到合适的定义方法来为版本 3.0 实现此功能,建议的解决方案是版本

【问题讨论】:

  • 你使用VTK/OpenCV的修改版本吗?
  • 我刚刚从他们的 GIT 存储库中获取了源代码。我要做的就是将源代码添加到我的第三方文件夹并使其构建并将其链接到我的可执行文件。

标签: c++ opencv build cmake


【解决方案1】:

我认为最好的方法是在 github 上寻找更大的项目正在做的事情。我建议查看this repo,他们在其中使用 opencv 3.2 版,自动下载并编译它。我相信这是正确的方法,因为如果您想更新代码,只需更改版本以尝试与较新版本的兼容性。
您正在寻找的可能是所谓的超级构建。 This post 可能会有所帮助。

【讨论】:

    【解决方案2】:

    我建议在你的 repo 或你的构建目录的子文件夹中构建和安装 opencv。然后您可以将OpenCV_DIR 环境变量设置为<opencv_install_prefix>/lib/cmake/opencv4 文件夹(或至少指向OpenCVConfig.cmake 所在的文件夹)

    然后在你的CMakeLists.txt你可以直接使用:

    find_package(OpenCV 4 REQUIRED
      COMPONENTS core imgproc ximgproc)
    target_link_libraries(${PROJECT_NAME} PUBLIC ${OpenCV_LIBS})
    

    OpenCV_DIR 变量告诉 CMake 在哪里可以找到 find_package 函数所需的 OpenCV 配置文件。

    对于构建和安装步骤,您可以使用ExternalProjectFetchContent(我更喜欢后者),但由于 OpenCV 的构建时间可能很长,您可能希望将构建工件保留在项目的构建文件夹之外.然后你可以擦除你的构建文件夹来重建你的项目,而不用重建整个 OpenCV 库。 就我而言,我正在使用一个 shell 脚本,如果需要,它会在构建需要它的项目之前构建 OpenCV。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 2012-01-19
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      相关资源
      最近更新 更多