Cmake学习笔记5之opencv实践以及opencv_contrib的配置

最近还是比较了解这些CMake语句,所以就拿着opencv以及opencv_contrib两个库的源码进行了编译,顺便拿老师的代码分析了一波,了解一下深层次的原理和相关的变量。

Linux中configure.sh和Windows中configure.sh的换行的写法和区别。

Linux中使用反斜线进行换行操作

换行操作的原理就是可以省去在每一行前面重复编写cmake -DXXX

rm build -rf
mkdir build
cmake -S . -B build
cmake -DOPENCV_EXTRA_MODULES_PATH="/home/lincong/Desktop/opencv_contrib/modules" -DBUILD_opencv_wechat_qrcode=OFF build \
      -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_SYSROOT=$CONDA_PREFIX/$HOST/sysroot 
Windows中使用^进行换行
mkdir build
cmake -S . -B build
cmake -DOPENCV_EXTRA_MODULES_PATH="/home/lincong/Desktop/opencv_contrib/modules" -DBUILD_opencv_wechat_qrcode=OFF build ^
      -DCMAKE_PREFIX_PATH=$CONDA_PREFIX ^
      -DCMAKE_BUILD_TYPE=Release ^
      -DCMAKE_SYSROOT=$CONDA_PREFIX/$HOST/sysroot 

相关变量的查阅

CMAKE_PREFIX_PATH

由分号分隔的目录列表,指定要由安装程序搜索的安装 前缀find_package(), find_program(), find_library(), find_file(), 和 find_path()命令。每个命令将添加相应的子目录(例如bin,lib或include),作为其自己的文档中指定。

默认情况下为空。它打算由项目设置。
实际上,官方文档说了这么多,就是指定find_package这些函数的搜索前缀,相对来说搜寻就比较快。这里的$CONDA_PREFIX就是我的miniconda所在路径,显示为/home/minconda

编译opencv和opencv_contrib
方法一根据文档说明进行编译

之前根据我自己的Qt5进行编译确实碰到了不少麻烦,而且不知道-DBUILD_opencv_xxx是干嘛的,但其实Readme文档确实给了很详细的说明。
在这里插入图片描述
命令行仿照如下,这里需要说明一点的是你需要将BUILD_opencv_world选项设置为ON,默认是不会勾选的。
之所以勾选其实很大一部分原因就是不勾选直接编译点击 Generate 的话还是会生成很多独立的依赖库,在调用添加时不是很方便,所以我建议还是直接使用Anaconda库进行opencv的管理,至于那个Anaconda仓库里面是否有opencv_contrib还需要进一步探究,这里我也不是真正想要用这个库,只是根据这一个个代码编译的实践锻炼自己编译代码的能力以及CMake的使用方法。

rm build -rf
mkdir build
cmake -S . -B build
cmake -DOPENCV_EXTRA_MODULES_PATH="/home/lincong/Desktop/opencv_contrib/modules" -DBUILD_opencv_wechat_qrcode=OFF build \
      -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_SYSROOT=$CONDA_PREFIX/$HOST/sysroot \
      -DBUILD_opencv_world=ON 

最后编译结果如下(微信二维码的模块并没有编译)
在这里插入图片描述

方法二根据报红的cmake-gui选项进行命令行书写编译

确定好对应的生成目录和源文件目录之后点击configure出现下面的情况。
在这里插入图片描述
这里会出现一些变量名的方式,都是一些编译的可选项,所以这里就回到前面几章讲述的,cmake-gui还是非常有必要的,可以直接帮我们把需要进行配置的选项以可视化的方式显示出来而不是自己去那一堆.cmake结尾的文件中查找option,然后再根据对应的option使用命令行的方式进行关闭或者开启。所以这个cmake工具还是非常方便的,显示option是它很友好的一个方面,通过我们进行勾选的方式进行set(-DXXXX OFF)和set(-DXXXX ON)的方式进行操纵。
这里提醒一点,你还是编译这些源码的时候进行勾选opencv_world选项。

根据上面报红的option对我们的configure.sh进行优化设置

在这里插入图片描述
优化之后的configure.sh代码

rm build -rf
mkdir build
cmake -S . -B build
cmake -DOPENCV_EXTRA_MODULES_PATH="/home/lincong/Desktop/opencv_contrib/modules" -DBUILD_opencv_wechat_qrcode=OFF build \
      -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_SYSROOT=$CONDA_PREFIX/$HOST/sysroot \
      -DBUILD_opencv_world=ON \
      -DBUILD_openv_python_tests=OFF \
      -DBUILD_opencv_java_bindings_generator=OFF \
      -DBUILD_opencv_js_bindings_generator=OFF \
      -DBUILD_DOCS=ON \
      -DOPENCV_DNN_CUDA=ON \
      -DWITH_QT=ON \
      -DWITH_CUDA=ON 

版权声明:本文为qq_45605535原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。