opencvb 十七 使用cmake配置opencv c++项目

news/2024/10/19 5:30:58/

1、cmake简介

1.1 cmake是什么

CMake是一个开源、跨平台的编译(Build)工具,是用来构建、测试和打包软件的。它能够用简单的语句来描述所有平台的编译过程。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。 CMake并不直接生成最终的软件,而是产生标准的建构文件(如Unix的Makefile或Windows Visual ,C++的projects/workspaces),这些文件可以被一般的编译工具所使用。

1.2 cmake能做什么

CMake是一个跨平台的构建自动化工具,可以自动生成跨平台的Makefile、Visual Studio等IDE项目、Xcode项目和Ninja build等常见项目文件。CMake的工作方式是通过读取CMakeLists.txt文件中的指令来生成相应的项目文件,从而支持多种编译器、操作系统、硬件架构等,为跨平台开发提供方便。CMake的具体功能包括但不限于:

  • 编译源代码、制作程序库。CMake自己不编译程序,而是使用CMakeLists.txt构建脚本指挥各种编译工具生成可执行程序或链接库。
  • 产生适配器(wrapper)。CMake还可以用任意的顺序建构执行档。
  • 支持in-place建构(二进制文件和源代码在同一个目录树中)和out-of-place建构(二进制文件在别的目录里),因此可以很容易从同一个源代码目录树中构建出多个二进制文件。
  • 测试编译器所支持的C++特性。
  • 自定义编译选项和平台特定的配置,从而使软件可以在多个平台上正确地编译和运行。
  • 自动检测在系统中已经安装的库和头文件,从而避免了手动配置环境变量和链接库的繁琐工作。
  • 与其他构建工具(如make、Visual Studio等)无缝集成,这意味着开发者可以使用CMake来生成构建文件,然后将这些文件用作其他构建工具的输入,从而实现更高效的自动化构建过程。
    总之,CMake是一个功能强大的跨平台自动化构建工具,能够大大提高软件编译和安装的效率和便利性。

1.3 cmake有什么优点

CMake是一个跨平台的构建系统,它有以下优点:

  • 可移植性:CMake的目标是产生一种能与多种编译器以及在不同的操作系统上工作的构建系统。这使得CMake成为一个非常适合用于开源项目的构建系统,这些项目通常需要多种环境下的编译。
  • 模块化:CMake的模块化设计使得它可以方便地添加或移除功能。例如,你可以轻松地为项目添加一个新的子目录,并为其添加一个新的CMakeLists.txt文件。
  • 灵活性:CMake提供了一种名为"generator"的系统,允许你定制构建过程。例如,你可以为IDE生成项目文件,或者为持续集成系统生成构建任务。
  • 可扩展性:CMake支持使用自定义的命令和函数来扩展其功能。这使得CMake非常适合用于大型的、复杂的项目,其中可能需要一些特殊的构建逻辑。
  • 文档和社区支持:CMake有一个丰富的文档和活跃的社区,这意味着当你在使用CMake时遇到问题,你可以很容易地找到答案。
  • 支持多种语言:CMake可以用于构建用多种语言编写的项目,包括C、C++、Fortran等。
    *跨平台:它可以在三大主流平台上(Windows、Unix/Linux、MacOS)生成各自平台上的建构文件,从而编译出最终的可执行文件。
  • 集成测试:CMake提供了方便的机制来编写测试用例,并可以将其集成到持续集成系统中。
  • 灵活的缓存系统:CMake有一个灵活的缓存系统,可以让你存储和共享变量的值,这在大型项目中尤其有用。
  • 持续集成友好:CMake可以很容易地与持续集成系统集成,例如Jenkins或CircleCI。这意味着你可以轻松地在这些系统中设置自动构建和测试任务。
    以上就是CMake的一些优点,这使得它成为了一个强大且灵活的构建系统,无论是对于小型项目还是大型项目都非常适用

1.4 cmake下载安装

cmake 可直接在官网上下载,官网地址:https://cmake.org/
cmake Windows版本的安装配置详情可参考:https://blog.csdn.net/weixin_52677672/article/details/135815928
在这里插入图片描述

2、使用cmake生成c++项目

2.1 CMakeLists.txt文件配置使用

CMakeLists.txt 文件是用于描述 CMake 构建过程和项目配置的文件。它包含了一系列 CMake 命令、变量设置和流程控制结构,用于告诉 CMake 如何生成适合你的平台和编译器的构建系统文件。

常见内容和结构:

project():设置项目名称和版本号。
cmake_minimum_required():设置 CMake 的最低版本要求。
set():设置变量的值。
add_executable():添加可执行文件。
add_library():添加库文件。
target_link_libraries():链接库文件。
include_directories():添加头文件目录。
link_directories():添加lib文件路径

具体使用案例

cmake_minimum_required(VERSION 3.5.1)
#生成项目的名称
project(iris_recognition)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_SUPPRESS_REGENERATION FALSE)
#设置生成release项目
set(CMAKE_BUILE_TYPE RELEASE)
set(CMAKE_CXX_STANDARD 14)
# It prevents the decay to C++98 when the compiler does not support C++14
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# It disables the use of compiler-specific extensions
# e.g. -std=c++14 rather than -std=gnu++14
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")#set library path
set(OpenCV_DIR  E:/Lib/opencv470/)
message("如果目录中包含空格,请使用\对空格进行转义")file(GLOB SOURCE_FILES src/*.cpp)
include_directories(${OpenCV_DIR}/include${PROJECT_SOURCE_DIR}/include
)
link_directories(${OpenCV_DIR}/x64/vc16/lib
)
#add_library(${CMAKE_PROJECT_NAME} STATIC ${SOURCE_FILES})
add_executable(${CMAKE_PROJECT_NAME} ${SOURCE_FILES}) #生成可执行程序 项目
add_library(iris_recognition_dll SHARED ${SOURCE_FILES}) #生成动态链接库 项目target_link_libraries(${CMAKE_PROJECT_NAME}opencv_world470.lib
)
#target_link_libraries(
#	mytest
#	opencv_world470.lib
#)
target_link_libraries(iris_recognition_dllopencv_world470.lib
)

2.2 项目结构

与CMakeLists.txt相对应的目录结构如下图所示,一般来说,有include目录,src目录和CMakeList.txt文件即可。
在这里插入图片描述

2.3 CMake (cmake-gui)操作过程

根据配置好的CMakeLists.txt文件,CMake (cmake-gui)可将c++代码封装为可执行文件,更便捷的是CMake (cmake-gui)还可将c++代码封装为动态链接库,实现C++代码python 端的调用。在文本中,一般都是创建一个 build 用来存放 cmake 构建和编译的产物。CMake (cmake-gui)具体操作过程如下:
第一步:设置所需编译的C++代码路径和build 文件路径。
在这里插入图片描述
第二步:单击Configure 。
在这里插入图片描述

第三步:单击Generate。
在这里插入图片描述
完成前面三步后,CMake (cmake-gui)已经根据配置好的CMakeLists.txt文件,生成了相应的build 文件,并将cmake 构建和编译的产物存入了build文件夹中。
第四步,单击Open Projrct,即可打开Visual Studio。
在这里插入图片描述

如果单击Open Projrct之后反应太慢,还可直接打开创建好的build文件,直接单击生成的可执行文件,启动Visual Studio。
在这里插入图片描述
build 目录详情
在这里插入图片描述
其中iris_recognition.sln是生成的vs项目工程文件,通过双击该文件打开项目。
在这里插入图片描述


http://www.ppmy.cn/news/1342401.html

相关文章

如何对项目中的图片进行优化以及常见图片格式

一.优化 1.不用图片。很多时候会使用到很多修饰类图片,其实这类修饰图片 完全可以用 CSS 去代替。 2.对于移动端来说,屏幕宽度就那么点,完全没有必要去加载原图浪 费带宽。一般图片都用 CDN 加载,可以计算出适配屏幕的宽度&…

【c++】内部类和匿名对象

1.内部类 1.概念 概念:如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限 注意:内部…

微信小程序实现时间轴效果

目录 引言时间轴效果的应用场景微信小程序的优势时间轴效果的设计思路时间轴界面布局数据结构设计实现时间轴效果WXML结构设计WXSS样式设计JavaScript逻辑实现说明引言 时间轴效果的应用场景 时间轴效果作为一种独特且直观的信息展示形式,已经被广泛应用于各种场景中,提供了…

在Python中如何处理文件读写操作

目录 打开文件 读取文件 写入文件 处理文件的其他操作 使用with语句 错误处理 文件编码 总结 在Python中处理文件读写操作是一个基础且常用的技能。这里我将从以下几个方面进行详细介绍:打开文件、读取文件、写入文件、处理文件的其他操作,以及最…

Unity DOTS中的baking(三)过滤baking的输出

Unity DOTS中的baking(三)过滤baking的输出 默认情况下,在conversation world(baker和baking system运行的环境)下产生的所有entities和components,都会作为baking环节的输出。在baking结束时,U…

2023-12蓝桥杯STEMA考试 C++ 中高级试卷解析

蓝桥杯STEMA考试 C++ 中高级试卷(12月) 一、选择题 第一题 定义字符串 string a = "Hello C++",下列选项可以获取到字符 C 的是(B)。 A、a[7] B、a[6] C、a[5] D、a[4] 第二题 下列选项中数值与其它项不同的是( C)。 A、 B、 C、 D、 第三题 定义变量 int i =…

洗地机哪个品牌质量好?盘点当下最值得买的4款洗地机型号推荐

随着生活节奏的加快,人们对于家庭清洁的需求也越来越迫切。而洗地机作为家庭清洁利器备受青睐,但洗地机也分为很多款式,每一个款式都具备不同的清洁效果,可以节省不少时间。接下来,就由笔者为大家详细介绍一下洗地机哪…

LLVM实战之C源码编译

目录 1. 详细步骤 2. 工作原理 本文将展示使用Clang(C语言前端),把C语言源码转换成LLVM IR 。当然首先需要安装Clang并且把它添加到PATH环境中。 1. 详细步骤 (1)首先准备测试文件,在multiply.c文件编写…