关于新学C++编程Visual Studio 2022开始,使用Cmake工具构建Opencv和SDK在VS里编译项目开发简介笔记

1. C++ 项目build文件夹
2. VS解决方案管理器Solution——.sln文件
3. CMake 自动化构建工具
4. SDK软件开发工具包

  作为初学者,从工程项目开始接触完整一套流程工具和编译,有助于快速上手。

一、C++ 项目build文件夹

  在 VS2022 中打开 C++ 项目后,在项目文件夹下新建build文件夹是一让项目结构更清晰、易维护。build文件夹是一种 “工程最佳实践”,通过分离源码和编译产物,解决了 “文件混杂、清理困难、版本控制冗余” 等问题,尤其适合中大型 C++ 项目。即使是小型项目,使用build文件夹也能养成良好的工程管理习惯,减少后续维护成本。

  • 1.核心作用:分离 “源码” 与 “编译产物”
    • C++ 项目编译时会生成大量非源码文件(如.obj 目标文件、.exe 可执行文件、.lib 库文件、中间缓存等),这些文件统称为 “编译产物”。build文件夹的核心功能就是专门存放这些编译产物,避免它们与源码(.cpp、.h 等)混杂在同一目录下。
  • 2.具体优势:让项目更整洁、易维护
    • 源码目录更清晰,方便查找和管理;便于清理编译产物,避免冗余;支持多版本 / 多配置编译(如 Debug/Release);便于版本控制(如 Git);避免误操作删除源码。
  • 3.build文件夹
    • Debug/Release:存放不同配置的编译产物(最核心的分类)。
      Debug:调试版本,包含调试符号(.pdb)、未优化的可执行文件(.exe)或库文件(.lib/.dll),方便调试。
      Release:发布版本,经过优化(如代码压缩、移除调试信息),体积更小、运行更快。
    • x64/Debug、x64/Release 或 Win32/Debug:区分不同平台的编译产物(针对多平台项目)。
    • CMakeFiles:CMake 工具自动生成的中间文件(仅在使用 CMake 构建时存在)
    • 项目名.dir:存放特定项目的编译中间产物(针对多项目解决方案)
    • 其他可能的文件夹
      bin:存放最终可执行文件(.exe),常见于手动配置的项目。
      lib:存放库文件(.lib/.dll),常见于库项目。
      install:CMake 的install命令生成的文件(如安装包相关内容)。

二、 VS解决方案管理器Solution——.sln文件

  • 解决方案(Solution):对应.sln文件,是 “项目的容器”,可以包含 1 个或多个项目(例如一个主程序项目 + 一个工具类库项目)。

  • 项目(Project):对应.vcxproj文件,是实际的 “代码单元”,包含编译所需的源码、配置等,最终会生成.exe、.lib 等产物。
    在 Visual Studio 2022 中,每次进入文件夹需要打开.sln 文件,是因为.sln 文件是 Visual Studio 的解决方案文件,它包含了整个项目的配置信息和相关项目文件的引用,具有组织项目、便捷启动和统一配置等重要作用。
    1.整合项目资源
    一个 C++ 项目可能包含多个源文件(.cpp)、头文件(.h)以及其他资源文件等,.sln 文件用于将这些文件组织在一起,形成一个完整的项目解决方案。打开.sln 文件,Visual Studio 会根据其中的配置信息,加载所有相关文件,方便开发者对整个项目进行管理和开发。
    2.记录项目配置
    sln 文件记录了项目的编译配置信息,如 Debug(调试版)或 Release(发布版)配置、目标平台(x86、x64 等)、编译器选项等。打开.sln 文件时,Visual Studio 会读取这些配置,按照设定的参数进行编译等操作,确保项目能按照开发者期望的方式构建。
    3.关联开发环境
    Visual Studio 通过.sln 文件来关联项目与开发环境。它会根据.sln 文件中的信息,设置好代码编辑、调试、智能感知等功能所需的环境,使开发者能够在熟悉的环境中进行代码编写、调试等工作,例如启用代码自动补全、语法高亮等功能。
    4.便捷启动项目
    sln 文件默认与 Visual Studio 相关联。双击.sln 文件,系统会自动启动 Visual Studio 并加载项目,无需开发者先打开 Visual Studio 再手动查找和加载项目文件,提高了开发效率,是一种便捷的项目启动方式。
    5.解决方案管理器
    在 Visual Studio 2022 的解决方案管理器中,你看到的 “名称列表” 通常是项目(Project) 或解决方案(Solution) 本身,而每个项目下方的引用、外部依赖项、Header files、Source files等文件夹,是 VS 对项目文件的逻辑分类(非物理文件夹),作用是按 “文件功能” 整理项目资源,让开发者能快速定位和管理不同类型的文件。
    (1)引用(References)

    • 作用:管理当前项目依赖的 “外部库或其他项目”。
    • 其他项目:如果解决方案中有多个项目(如 A 项目依赖 B 项目),在这里可以添加对 B 项目的引用,确保编译时优先编译 B 并引用其产物。
    • 外部库:如第三方.dll、.lib 库,添加引用后 VS 会自动识别库的路径,避免手动写复杂的链接配置。

    (2)外部依赖项(External Dependencies)

    • 作用:显示当前项目 “间接依赖的头文件”(非项目自身的源码头文件)。
    • 系统头文件:如 C++ 标准库(iostream、vector)、Windows SDK 头文件(windows.h)。
    • 第三方库头文件:如你通过#include <opencv2/opencv.hpp>引用的 OpenCV 头文件(这些头文件不在你的项目目录下,而是在系统或库的安装路径中)。

    (3)Header files(头文件)

    • 作用:专门存放项目自身的 “头文件(.h、.hpp)”。
    • 项目中自定义的头文件(如myclass.h),用于声明类、函数、宏等(与.cpp文件对应)。
    • 特点:
    • 物理路径可能分散在不同文件夹,但 VS 会自动将所有.h文件集中到这里,方便查找。
    • 头文件是 “接口声明” 的核心,在这里能快速浏览项目的类结构、函数定义。

    (4)Source files(Source files)

    • 作用:专门存放项目自身的 “源文件(.cpp、.c)”。
    • 项目中自定义的源文件(如myclass.cpp),用于实现头文件中声明的函数、类方法等。
    • 特点:源文件是 “代码实现” 的核心,编译时 VS 会优先编译这里的文件,生成.obj 目标文件。

三、CMake 自动化构建工具

CMake 是一个跨平台的自动化构建工具,用于管理 C/C++ 项目的编译过程。它的核心作用是将 “项目编译配置” 与 “具体编译器 / 平台” 解耦,让开发者只需关注项目本身的结构,而无需为不同平台(Windows、Linux、macOS)或编译器(MSVC、GCC、Clang)编写复杂的编译脚本。

  • CMake 通过统一的配置文件(CMakeLists.txt) 描述项目结构,然后自动生成对应平台的 Makefile 或 Visual Studio 项目文件,从而实现 “一次配置,到处编译”。
  • CMake 如何构建项目
    • 编写 CMakeLists.txt:在项目根目录创建CMakeLists.txt,描述项目结构和编译规则。
    • 运行 CMake 生成构建文件
cd build
cmake ..  # 生成当前平台的构建文件(如Makefile或VS项目文件)
或者
cmake .. -DOpenCV_DIR=D:/software/opencv-4.11.0/build -DDMCAM_SDK_DIR=D:/SDK-1.82.8
%%opencv新建的build文件夹      和             SDK文件夹
  • 其他构建工具
工具适用场景特点
CMake跨平台大型 C/C++ 项目生成其他构建工具的配置文件,不直接编译,学习成本中等
MakeUnix/Linux 平台传统项目依赖 Makefile,语法复杂,需手动处理平台差异
Ninja快速编译(如 Chrome)轻量级,编译速度快,需配合 CMake 或其他工具生成配置文件
MSBuildWindows 平台 VS 项目Visual Studio 原生工具,仅支持 Windows,依赖.sln/.vcxproj 文件
  • cmake 构建加载SDK路径
    • 在使用 CMake 构建build文件夹时,出现 “加载 SDK 路径” 的提示,本质是 CMake 在自动查找当前项目依赖的 “系统开发工具包(SDK)” 的安装路径。这是 CMake 跨平台构建的核心步骤之一,目的是确保编译器能正确找到系统级的头文件、库文件和工具,从而完成编译。
  • 在 Visual Studio 2022(VS2022)中,默认的 C++ 编译器是MSVC(Microsoft Visual C++),具体版本为MSVC 14.3.x(对应 Visual Studio 2022 的工具集版本v143)。
  • 其他编译器
    • Clang/LLVM
      安装Clang 工具链(通过 VS2022 安装程序的 “单个组件” 选项)。
      在项目属性中选择Clang-Cl或Clang作为编译器,适合跨平台开发(Windows/Linux/macOS)。
    • GCC (MinGW)
      通过MSYS2等工具安装 GCC,然后配置 VS2022 的自定义生成工具调用 GCC 编译。
      需手动配置项目属性中的编译器路径、包含目录等,操作较复杂。
    • Intel C++ Compiler
      安装 Intel C++ Compiler,然后在 VS2022 中通过插件或手动配置集成。
      适合高性能计算(HPC)场景。

四、 SDK软件开发工具包

SDK 的全称是 “Software Development Kit”(软件开发工具包)。它是一套为特定软件、硬件或平台开发应用程序时提供的工具集合,不同设备厂家的 SDK 在功能接口、文件结构、使用方式、依赖环境等方面都会存在差异。

  • 头文件(.h)、库文件(.lib/.dll/.so 等)—— 用于调用功能接口;

  • API 文档 —— 说明接口的使用方法;

  • 示例代码 —— 提供基础使用范例;

  • 辅助工具(如配置器、调试器)—— 简化开发流程。

  • 简单来说,SDK 是 “开发者与设备 / 平台之间的桥梁”,通过它可以快速调用目标设备(如摄像头、传感器)或平台(如 Windows、Android)的功能,无需从零开发底层交互逻辑。不同设备厂家的 SDK必然存在差异,这是由设备硬件特性、技术规范和开发目标决定的。这些差异主要体现在接口设计、文件结构、依赖环境等方面,开发者使用时需针对具体 SDK 阅读文档,按厂家规范调用接口。如果需要适配多厂家设备,通常需要封装一层 “统一接口”(如抽象类),屏蔽底层 SDK 的差异。

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

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

相关文章

测试ppyoloe的小样本few-shot能力,10张图片精度达到69.8%

近期公司有个项目&#xff0c;需要解决长尾样本的问题&#xff0c;所以测试了一下paddlepaddle小样本的能力。 环境&#xff1a;&#xff1a;T4 、ubuntu 、cuda-11.6 、py3.9、 paddlepaddle-gpu2.6.0、pip install opencv-python4.5.5.64 -i https://pypi.tuna.tsinghua.…

结构化布线系统详解

1. 结构化布线系统概述 结构化布线系统(Structured Cabling System, SCS)是一种标准化、模块化的建筑物或建筑群内信息传输基础设施&#xff0c;它为语音、数据、图像等多媒体业务提供了统一的物理传输介质。与传统的点对点布线方式不同&#xff0c;结构化布线采用层次化、标准…

【Java学习】匿名内部类的向外访问机制

目录 一、方法局部变量的访问 1.生命周期 1.1方法生命周期 1.2匿名实例生命周期 1.3生命超时性 2.变量捕获 2.1按值捕获 2.1.1值捕获优势 2.1.1.1生命及时访问 2.1.1.2线程安全 2.1.2常量值捕获优势 2.2按引用捕获 引用捕获风险 (1)生命超时访问 (2)线程不安全 …

LinkedList的模拟实现+LinkedList和ArrayList的区别

目录 LinkedList的模拟实现 什么是双向链表 增加数据 头插法&#xff1a; 尾插法&#xff1a; 指定的下标插入&#xff1a; 删除数据 删除双向链表中出现的第一个key 置空所有数据 LinkedList和ArrayList的区别 顺序表对应的集合类是ArrayList&#xff1b;链表对应的集…

Vue + WebSocket 实时数据可视化实战:多源融合与模拟数据双模式设计

在现代交通大屏项目中&#xff0c;实时数据的采集和可视化尤为重要。本文结合 Vue3 和 ECharts&#xff0c;分享一个支持多 WebSocket 数据源实时合并、模拟数据调试、自动重连的完整设计方案&#xff0c;帮助你快速搭建健壮的数据可视化组件。一、项目背景与核心需求实时接收多…

C#索引器、接口、泛型

以下是对提供的 C# 代码中涉及的核心知识点的梳理和总结&#xff0c;涵盖索引器、接口、泛型三大核心内容&#xff0c;以及相关实践要点&#xff1a;一、索引器&#xff08;Indexer&#xff09;索引器是一种允许类或结构体像数组一样通过[]语法访问成员的特殊成员&#xff0c;本…

界面组件DevExpress WPF中文教程:Grid - 如何过滤节点?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

Excel——INDEX和MATCH傻傻分不清?

核心逻辑​先用 MATCH 找到目标姓名在表格中的 ​行号&#xff0c;再用 INDEX 根据行号 ​提取对应信息。就像查字典&#xff1a;先用拼音找到字的页码&#xff08;MATCH 找行号&#xff09;再翻到该页看具体解释&#xff08;INDEX 取数据&#xff09;​分步拆解&#xff08;以…

制造业低代码平台实战评测:简道云、钉钉宜搭、华为云Astro、金蝶云·苍穹、斑斑低代码,谁更值得选?

上回聊了斑斑和简道云&#xff0c;不少同行私信问我其他几个低代码平台怎么样&#xff0c;今天就给大家来个"五大门派"终极对决&#xff01; 一、先说痛点 制造业搞数字化最怕三件事&#xff1a; 1.钱花了没效果&#xff08;大平台用不起&#xff0c;小工具不够用&…

Jenkins中HTML文件显示样式问题解决方案

Jenkins中HTML文件显示样式问题解决方案 问题描述 在Jenkins中归档的HTML文件显示格式失效&#xff0c;样式无法正常显示&#xff0c;但在本地浏览器中打开却能正常显示。 问题原因 Jenkins为了安全考虑&#xff0c;默认设置了严格的内容安全策略(Content Security Policy, CSP…

四、配置文件

文章目录1. 文件类型1.1 properties1.2 yaml1.2.1 简介1.2.2 基本语法1.2.3 数据类型1.2.4 示例2. 配置提示1. 文件类型 1.1 properties 同以前的properties的用法 1.2 yaml 1.2.1 简介 YAML 是 “YAML Ain’t Markup Language”&#xff08;YAML 不是一种标记语言&#x…

Python常用医疗AI库以及案例解析(场景化进阶版)

📊 框架应用拓扑图用例 #mermaid-svg-lZ1J5KCaVWBV2kAu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-icon{fill:#552222;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-text{fill:#552222;st…

Python高效操作Kafka实战指南

Python操作Kafka的高效 以下是使用Python操作Kafka的高效消息发送实例,涵盖基础发送、批量处理、异步回调等场景。示例基于confluent-kafka库(推荐)和kafka-python库,代码均经过实测。 流程图 基础消息发送(同步) from confluent_kafka import Producerproducer = Pro…

离线快速处理PDF格式转化的方案

日常办公中&#xff0c;PDF 几乎成了我们离不开的文件格式。然而像 WPS 这样的工具&#xff0c;不少实用功能都需要额外付费才能解锁。它的打开方式很简单&#xff0c;双击桌面图标即可运行。它不会弹出主界面&#xff0c;而是默默驻留在系统托盘区&#xff0c;需要时双击图标就…

SpringMVC注解与SpringCloudOpenFeign注解对比

1. 背景知识 梳理SpringMVC和SpringCloudOpenFeign常用注解后&#xff1a; Spring MVC中常用注解_笔记-CSDN博客Spring Cloud OpenFeign 常用注解_笔记-CSDN博客 这里对两类注解做个对比。理解两者定位&#xff08;服务端 vs 客户端&#xff09;是掌握注解使用的关键&#x…

Linux 时间同步的流程

一、问题时间RTC时间、系统时间(UTC)和本地时间的关系如下&#xff1a;‌RTC时间‌&#xff08;硬件时钟&#xff09;&#xff1a;显示为UTC时间格式&#xff1a;02:50:35/02:51:28由主板电池供电&#xff0c;独立于系统运行‌12通常存储UTC时间&#xff08;Linux默认配置&…

VSCode——python选择解释器消失的解决办法

VSCode软件的左下角 设置——检查更新&#xff1a;

笛卡尔积规避:JOIN条件完整性检查要点

笛卡尔积是数据库查询中的高风险操作&#xff0c;多表JOIN时缺失有效关联条件会导致结果集指数级膨胀&#xff0c;引发‌性能塌方‌甚至系统崩溃‌。以下是核心检查策略及防御方案&#xff1a;一、笛卡尔积的致命影响‌‌性能塌方‌百万级订单表与千万级用户表缺失ON条件时&…

Vimba相机二次开发教程,基于Python

文章目录安装获取图像辅助数据Vimba 是由 Allied Vision 开发的一套软件开发套件&#xff08;SDK&#xff09;&#xff0c;主要用于控制和操作其工业相机产品。它提供了一套完整的 API 和工具&#xff0c;支持多种操作系统和编程语言&#xff0c;便于开发者快速集成相机功能到应…

电子测试行业软件ATECLOUD与ETEST对比分析-纳米软件

在当今科技飞速发展的时代&#xff0c;电测行业对于自动化测试平台的依赖程度日益加深。高效、精准的自动化测试平台不仅能够提升测试效率&#xff0c;还能确保产品质量。ATECLOUD 与 ETEST 作为电测行业中颇受瞩目的自动化测试平台&#xff0c;各自展现出独特的优势与特点。下…