使用cmake配置opencv c++项目

1、cmake简介

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

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是一个功能强大的跨平台自动化构建工具,能够大大提高软件编译和安装的效率和便利性。

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的一些优点,这使得它成为了一个强大且灵活的构建系统,无论是对于小型项目还是大型项目都非常适用

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

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

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
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/440151.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day02-课后练习2-参考答案(数据类型和运算符)

文章目录 巩固题1、案例:今天是周2,100天以后是周几?2、案例:求三个整数x,y,z中的最大值3、案例:判断今年是否是闰年4、分析如下代码的计算结果5、分析如下代码的计算结果6、分析如下代码的计算结果7、分析如下代码的计…

最新即时通讯社交APP源码 支持H5群聊、红包转账和朋友圈

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买) 功能简介 我们的即时通讯应用提供了完备的IM功能,支持文字、表情、图片、语音等多种聊天方式,包括单聊、群聊、已读…

不是能画原型就叫会“快速原型”的,好吗?

原型设计作为当前软件、互联网行业最有效的信息传达方式之一,是所有产品经理、交互设计师、UX设计师必须掌握的技能。掌握原型设计同样也是UI设计师、开发工程师甚至运营、市场人员提高自身竞争力的加分项。并且,学习原型设计的难度低,上手快…

【算法专题】贪心算法

贪心算法 贪心算法介绍1. 柠檬水找零2. 将数组和减半的最少操作次数3. 最大数4. 摆动序列(贪心思路)5. 最长递增子序列(贪心算法)6. 递增的三元子序列7. 最长连续递增序列8. 买卖股票的最佳时机9. 买卖股票的最佳时机Ⅱ(贪心算法)10. K 次取反后最大化的数组和11. 按身高排序12…

Ajax入门与使用

目录 ◆ AJAX 概念和 axios 使用 什么是 AJAX? 怎么发送 AJAX 请求? 如何使用axios axios 函数的基本结构 axios 函数的使用场景 1 没有参数的情况 2 使用params参数传参的情况 3 使用data参数来处理请求体的数据 4 上传图片等二进制的情况…

Linux操作系统权限相关问题(一站式速通权限)

一、sudo命令 sudo yum install -y sl sudo命令的作用 不切换用户,就想让普通用户以root的身份,执行对应的指令 输入密码时,输入的是自己普通用户的密码,而不是root的密码!!! sudo可以进行…

React 面试题

1、组件通信的方式 父组件传子组件:通过props 的方式 子组件传父组件:父组件将自身函数传入,子组件调用该函数,父组件在函数中拿到子组件传递的数据 兄弟组件通信:找到共同的父节点,用父节点转发进行通信 …

翻译: GPT-4 Vision通过量身定制的推荐来增强应用的用户体验 升级Streamlit五

GPT-4 Vision 系列: 翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式一翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式二翻译: GPT-4 Vision静态图表转换为动态数据可视化 升级Streamlit 三翻译: GPT-4 Vision从图像转换为完全可编辑的表格 升级St…

人工智能(pytorch)搭建模型23-pytorch搭建生成对抗网络(GAN):手写数字生成的项目应用

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型23-pytorch搭建生成对抗网络(GAN):手写数字生成的项目应用。生成对抗网络(GAN)是一种强大的生成模型,在手写数字生成方面具有广泛的应用前景。通过生成…

Visual Studio 2022 C++ 生成dll或so文件在windows或linux下用C#调用

背景 开发中我们基本使用windows系统比较快捷,但是部署的时候我们又希望使用linux比较便宜,硬件产商还仅提供了c sdk!苦了我们做二次开发的码农。 方案 需要确认一件事,目前c这门语言不是跨平台的 第一个问题【C生成dll在window…

【Linux】—— 信号的产生

本期,我们今天要将的是信号的第二个知识,即信号的产生。 目录 (一)通过终端按键产生信号 (二)调用系统函数向进程发信号 (三)由软件条件产生信号 (四)硬件…

【MySQL】学习如何通过DQL进行数据库数据的基本查询

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-KvH5jXnPNsRtMkOC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…