Linux 使用cmake构建OpenCV项目


前期准备

ubuntu18.04安装vscode和opencv3.4.6教程
只用完成“一”部分就ok

Linux之cmake入门
我们采用外部构建的方式,如果你不知道外部构建,先看看这个


我们只构建一个最简单的OpenCV项目,想要更合理的结构请看参考链接。

一、准备

mkdir code
cd code
gedit main.cpp

main.cpp内容:

#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
	Mat mat(400,300,CV_8UC3,Scalar(255,215,0));
	cout<<"hello opencv\n";
	imshow("image",mat);
	waitKey();
	return 0;
}

二、构建CMakeLists.txt

1.指令

cd code
gedit CMakeLists.txt

[内容]

# project name
PROJECT(HELLO)

# using C++11
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11 ")

# cmake version
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)

# find OpenCV
FIND_PACKAGE(OpenCV REQUIRED)

# show the message of OpenCV
message(STATUS "OpenCV library status:")
message(STATUS "    version: 	${OpenCV_VERSION}")
message(STATUS "    headers: 	${OpenCV_INCLUDE_DIRS}")
message(STATUS "    libraries: 	${OpenCV_LIBS}")

# link headers
INCLUDE_DIRECTORIES({OpenCV_INCLUDE_DIRS})

# 添加源代码文件到SRC_LIST变量中
AUX_SOURCE_DIRECTORY(. SRC_LIST)

# 生成可执行文件
ADD_EXECUTABLE(hello ${SRC_LIST})

# after ADD_EXECUTABLE,为生成文件target添加库
TARGET_LINK_LIBRARIES(hello ${OpenCV_LIBS})

2.解析:

(1)环境

set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11 ")

使用c++11编译

CMAKE_MINIMUM_REQUIRED(VERSION 3.10)

cmake最低版本

(2)FIND_PACKAGE()

FIND_PACKAGE(<name> [major.minor] [QUIET] [NO_MODULE] 
[[REQUIRED|COMPONENTS] [componets...]])

参数:

  • REQUIRED 参数
    如果使用了这个参数,说明这 个链接库是必备库,如果找不到这个链接库,则工程不能编译。

功能:
只找一个名为name的包(后面都是修饰条件),所以如果要找多个包,要分多个FIND_PACKAGE()写。

此处:
当它找到OpenCV程序库之后,就会帮助我们预定义几个变量,OpenCV_FOUNDOpenCV_INCLUDE_DIRSOpenCV_LIBRARY_DIRSOpenCV_LIBRARIES,它们分别指是否找到OpenCV,OpenCV的头文件目录,OpenCV的库文件目录,OpenCV的所有库文件列表。

我们后面需要用到OpenCV_INCLUDE_DIRSOpenCV_LIBRARY_DIRS,不写它这几个变量就无效,所以它必不可少。

(3)INCLUDE_DIRECTORIES()

include_directories(
    ${OpenCV_INCLUDE_DIRS}
)

链接头文件

(4)TARGET_LINK_LIBRARIES()

TARGET_LINK_LIBRARIES(target library1 <debug | optimized> library2...)

这个必须写在ADD_EXECUTABLE()之后,为生成文件target添加库。

三、执行

mkdir build
cd build
cmake ..
make
./hello

在这里插入图片描述
路径:

  • code
    • build
      • buildPic.png
    • main.cpp
    • CMakeLists.txt
    • codePic.png

四、路径问题

1.CMakeLists.txt中

本目录为CMakeLists.txt所在目录(code下)
在这里插入图片描述
所以

AUX_SOURCE_DIRECTORY(./src/main SRC_LIST)
AUX_SOURCE_DIRECTORY(./src/serial SRC_LIST)
AUX_SOURCE_DIRECTORY(./src/mercure SRC_LIST)

2.cmake编译

本目录认为是终端所在路径(build下),要编译CMakeLists.txt所在的目录(build的父目录下包含CMakeLists.txt,所以是cmake ..
在这里插入图片描述

3.代码中

(1)预编译指令

本目录是本代码源文件所在目录(src/main下)

#include "../serial/SerialUtil.hpp"

(2)函数部分

同cmake编译,本目录认为是终端所在路径(build下)

// main.cpp中main()中
Mat tree = imread("../src/main/tree.jpeg");

参考:
使用CMake构建OpenCV项目

  • 14
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值