【问题标题】:How to include opencv source files as a cmake dependency without installing it?如何在不安装的情况下将 opencv 源文件包含为 cmake 依赖项?
【发布时间】:2017-11-15 10:45:54
【问题描述】:

我的系统中安装了 opencv,但我不想使用已安装的版本。安装的版本(来自发行版存储库)是使用 gcc 7 编译的。

我想使用安装在单独路径中的较旧的 gcc 编译器来编译一个以 opencv 和 dlib 作为依赖项的 C++ 项目。我已经下载了 opencv 源并将其解压缩到一个单独的文件夹中。什么是包含它的正确方法 cmake 以便在编译期间将其编译并包含为依赖项?

这是我的项目结构。

projects/
  |--> project1/
  |      |--> main.cpp
  |      |--> CMakeLists.txt
  |
  |--> dlib/
  |
  |--> opencv-3.3.1/

我的 CMakeLists.txt 看起来像这样。

cmake_minimum_required(VERSION 2.8.12)

project(project1)
add_subdirectory(../dlib/dlib dlib_build)
add_subdirectory(../opencv-3.3.1/dlib opencv_build)

add_executable(project1 main.cpp)
target_link_libraries(project1 dlib::dlib opencv)

【问题讨论】:

  • 您是说您想使用与您系统上安装的 gcc 不同的 gcc 运行 cmake 项目吗?或者您想使用与系统上安装的不同的 opencv 源进行编译?
  • 系统安装了gcc7,也安装了gcc7编译的opencv版本。我不想使用它们中的任何一个,因为我需要 cuda 支持。我通过在终端设置 CC 和 CXX 变量将 gcc6 安装在我正在使用的不同路径中。我想在我的项目中使用opencv,但我不能使用已安装的,所以我需要将源代码中的opencv作为依赖项。

标签: c++ linux opencv build cmake


【解决方案1】:

要指定不同的编译器,请将 -DCMAKE_CXX_COMPILER -DCMAKE_CC_COMPILER 参数传入 cmake,每个参数都引用适当的路径和命令。

当您在 add_library 函数中添加源时,请准确告诉它源的位置。 所以...

list(${CUSTOM_OPENCV} APPEND
"/custom/path/source1.cpp"
"/custom/path/source2.cpp"
)

add_library(my_app ${CUSTOM_OPENCV})

我可能会这样做。您甚至可能希望通过 cmake 参数传入自定义路径,以使您的项目更加健壮以备将来使用。

【讨论】:

  • 我已经编辑了我的问题以更清楚地解释问题。我通过临时更改 shell 中的 CC 和 CXX 变量将编译器设置为 gcc6,它运行良好。 dlib 也正在构建和包含,没有问题。我无法正确包含它的唯一opencv。常用的findpackage方法查找系统中已经安装但不想使用的opencv。
猜你喜欢
  • 2018-06-03
  • 2015-06-28
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 2015-02-07
相关资源
最近更新 更多