Ubuntu设置CMake编译时使用的OpenCV版本

文章目录

  • 1.方法一:统一修改CMakeLists.txt文件中的OpenCV版本
    • 1.1.具体操作
    • 1.2.命令讲解
      • 1.2.1.sed命令
      • 1.2.2.xargs命令
      • 1.2.3.find命令
  • 2.方法二:调用cmake命令时传入编译参数
    • 2.1.普通CMake工程
    • 2.2.ROS工程

1.方法一:统一修改CMakeLists.txt文件中的OpenCV版本

1.1.具体操作

  1. 查看哪些文件中有“OpenCV REQUIRED”(无用)
grep -r "OpenCV REQUIRED" *
  1. 查看有哪些“CMakeLists.txt”文件(无用)
find ./ -name "CMakeLists.txt"
  1. 把“CMakeLists.txt”文件中原来的“OpenCV REQUIRED”统一替换成“OpenCV 3 REQUIRED”(实用
find ./ -iname "CMakeLists.txt" | xargs sed -i "s/OpenCV REQUIRED/OpenCV 3 REQUIRED/g"

1.2.命令讲解

1.2.1.sed命令

Linux之sed命令详解

sed中的-i选项意思是对文件直接进行编辑;" "里面的s/...../g命令意思是替换文件中每一行的所有匹配文本为新的文本,比如 sed -i 's/book/books/g' file会匹配file文件中每一行的所有book替换为books。

1.2.2.xargs命令

xargs命令 – 过滤器

简单的来说这个命令就是把前面的命令穿过来的值作为下一个命令的参数,传入给下一个命令。按照上面替换OpenCV版本的操作,就是寻找到所有的CMakeLists.txt文件,然后把这些文件传给sed命令,从而实现这些文件中OpenCV内容的替换。

1.2.3.find命令

find命令 – 查找和搜索文件

find命令就是查找和搜索文件的,其中-name参数是按照文件名进行搜索,如果前面加了-i前缀变成-iname则代表搜索文件名不区分大小写。

2.方法二:调用cmake命令时传入编译参数

2.1.普通CMake工程

在调用cmake命令进行编译的时候,可以一并传入相关的参数。

比如在CMakeLists.txt文件中,为了让cmake到特定的位置去找OpenCV,一般会写成下面这样:

set(OpenCV_DIR "/usr/local/opencv-3.4.5/share/OpenCV")
find_package(OpenCV  REQUIRED)
# 或者有的程序会制定OpenCV版本 find_package(OpenCV  3 REQUIRED)

上面的语句就是指定cmake到我设置的目录下寻找OpenCV,如下图所示。注意这个路径一定要设置到OpenCVConfig.cmake所在的目录,因为这是find_package命令寻找的文件,对应find_packageConfig模式。关于find_package的查找模式,可以参考:Cmake之深入理解find_package()的用法。
Ubuntu设置CMake编译时使用的OpenCV版本_第1张图片
set命令就相当于给变量设置值,设置了OpenCV这个包的查找路径OpenCV_DIR的值使我们想要的路径。

set命令同样的效果,可以在命令行调用cmake命令的时候一并传入参数,写成如下命令(注意-D后面没有空格):

# 1. shell命令行输入
cmake  -DOpenCV_DIR=/usr/local/opencv-3.4.5/share/OpenCV
# 2.等价于CMakeLists.txt中的 :
set(OpenCV_DIR "/usr/local/opencv-3.4.5/share/OpenCV")

2.2.ROS工程

ROS使用的是catkin_make而不是cmake,但是注意catkin_make底层还是cmake。只不过由于ROS工程很庞大,为了方便编译管理对cmakemake进行了封装变成了catkin_makecatkin_make仍然提供了跟cmakemake对接的参数:

 --cmake-args [CMAKE_ARGS [CMAKE_ARGS ...]]
                        传给CMake的参数
  --make-args [MAKE_ARGS [MAKE_ARGS ...]]
                        传给Make的参数

因此对于ROS工程,上面的设置OpenCV查找路径可以在调用catkin_make的时候写成:

catkin_make  --cmake-args  -DOpenCV_DIR=/usr/local/opencv-3.4.5/share/OpenCV

但是,实际上直接把catkin_make当成cmake命令来用也是可以的,因此上面的命令也可以写成:

catkin_make  -DOpenCV_DIR=/usr/local/opencv-3.4.5/share/OpenCV

另外想catkin_make -j8等命令都可以使用。因此在调用catkin_make编译的时候传参和cmake的使用差不多。

你可能感兴趣的:(Linux工具操作笔记,opencv,linux,人工智能)