【opencv源码解析0.4】如何使用cmake来管理项目

如何使用cmake来管理项目

【opencv源码解析0.1】VS如何优雅的配置opencv环境
【opencv源码解析0.2】如何编译opencv库源码
【opencv源码解析0.3】调试opencv源码以及使用cmake来管理项目

前面几篇文章我们都是围绕Visual Studio 2019这个IDE来展开的,IDE为我们做了太多太多的事情,虽然使用很方便,但工程管理太臃肿,你的项目都会夹带着诸如.sln、.vcxproj、.filters、.user等等各种VS自己的工程文件:

在这里插入图片描述

甚至vs会给你自动生成很多诸如DLLMain、pch.h、pch.cpp等等这些完全可以省略的优化文件。

而使用cmake却很简捷,你只需要编写好你的cmake工程文件,就可以简捷的管理你的工程,就像opencv使用cmake来管理一样,不仅简捷,还可以跨平台。

简捷体现在哪呢,使用cmake来管理你的项目,所有的配置选项都会在cmake-gui的options界面显示出来供使用者配置,且源码和工程是分离的(也就是source和build是分离的)。

所以本教程同样采取cmake来管理我们的项目,项目结构如下:

在这里插入图片描述

项目采用cmake来管理:

  • CMakeModules:一些cmake文件
  • image:存放本教程用到的图片
  • MCV_Code和Samples_Code:教程代码
  • Tutorial:教程,主要是文档
  • README.md

学习本教程,学会cmake是你必然的收获。因为学习cmake没有什么方式比参与一个由cmake管理的项目来的更快更好了。

1)cmake学习资源

学习cmake首推cmake的官方教程:

https://cmake.org/cmake/help/latest/guide/tutorial/

然后推荐一本开源书籍《cmake菜谱》:

https://www.bookstack.cn/read/CMake-Cookbook/README.md

2)如何使用cmake管理项目

我们来简单的介绍一下如何使用cmake来管理项目,我们以我们前几篇文章一直在使用的test_link_opencv这个项目来说,这个项目是直接使用VS创建的一个控制台应用程序,也就是生成exe可执行文件,我们现在先回退到链接opencv库以前的状态。

如何使用cmake来管理、生成这样一个exe项目呢:

在这里插入图片描述

直接创建如上三个空文件。

CMakeLists.txt名称必须如此,这是cmake的设定,我们通过在该文件内写cmake代码来完成项目的配置和管理。另外再创建一个test.cpp和test.h,我们会将这两个文件编译成一个test.exe可执行文件。

在CMakeLists.txt中写如下cmake代码:

#工程基础配置
cmake_minimum_required(VERSION 3.21 FATAL_ERROR)# 设置最低cmake版本
project(TestCMake LANGUAGES CXX)# 创建一个工程,对应VS里的解决方案,并设置工程的语言为C++
set(CMAKE_CXX_STANDARD 17)# 设置C++标准为C++17,CMAKE_CXX_STANDARD变量为cmake的内置属性变量

# 添加文件
file(GLOB _SRCS test.cpp test.h) #将.cpp .h文件,都添加到_SRCS变量中
add_executable(${PROJECT_NAME} ${_SRCS})# 将.cpp .h编译为一个exe

对以上代码做几点解释,如果还不懂的,哪个cmake语句不懂,就去百度哪个,然后再去看官方文档教程。

  1. cmake_minimum_required和project()是每个cmake工程都必须要有的。
  2. cmake有很多内置类型,我们不需要声明这些类型cmake就能知道它的含义,我们只需要直接使用set()语句对这些变量进行设置,cmake就会按照我们设置的方式运行,例如上面程序中的CMAKE_CXX_STANDARD,就代表我们编译我们工程时,使用哪个C++的标准,上面时使用了C++17标准。
  3. file()函数可以将文件整合到一个变量中,上面代码中的变量为_SRCS,变量可以随意命名,它可以理解为一个列表,里面存储了test.cpp test.h,当我们项目的文件多的时候,可以一股脑的都添加到一个变量里
  4. add_executable()是将文件编译为一个exe程序,上面我们用到了它的两个参数,分别是生成目标文件exe的目标名称,我们直接使用了我们的项目名称。第二个参数就是我们要编译的文件
  5. cmake访问变量,都是通过${变量名}来访问的

完成上面代码后,我们仿照编译opencv库的方式,来编译我们自己的cmake项目:

在这里插入图片描述

打开cmake-gui,选择源码路径、build路径后,点击Configure、Generate按钮:

在这里插入图片描述

可以看到配置、生成均成功了,在中间的options选项区域,有两个红色的选项,红色我们前面也说过,代表这两个选项第一次出现在页面上,用来提示使用者的,并不代表出错。

我们在我们短短的几行代码中,并没有添加任何选项,所以页面上出来的这两个选项是cmake默认自动生成的:

  1. CMAKE_CONFIGURATION_TYPES:项目可构建的类型,比我们熟知的Release、Debug还多了两个,大家自行百度
  2. CMAKE_INSTALL_PREFIX:项目安装目录,本项目用不上,自行百度

点击cmake-gui页面上的Open Project按钮,可以直接打开我们编译生成的VS2019工程:

在这里插入图片描述

我们可以看到三个内容:

  1. 配置选项有四个,就是我们上面提到的Debug;Release;MinSizeRel;RelWithDebInfo
  2. 左侧文件书内有我们的TestCMake解决方案,以及我们的同名项目TestCMake,里面包含test.cpp和test.h
  3. 打开test.cpp,里面是空白的,因为我们没有往里面写任何东西

现在我们编写一个经典的hello代码:

#include <iostream>
#include "test.h"

using namespace std;

int main()
{
	cout << "hello cmake!" << endl;
	return 0;
}

在这里插入图片描述

将我们的TestCMake项目设为启动项。然后运行:

在这里插入图片描述
大功告成!
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值