当前位置: 首页 > news >正文

关于新学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.lryc.cn/news/599293.html

相关文章:

  • 《汇编语言:基于X86处理器》第9章 编程练习
  • vscode 登录ssh记住密码直接登录设置
  • vscode 字体的跟换
  • Web前端:JavaScript Math选字游戏 斯特鲁普效应测试
  • 短剧广告变现系统全栈开发指南:从架构设计到高并发实践
  • 动态规划Day1学习心得
  • RocketMQ常见问题梳理
  • kafka如何保证数据不丢失
  • 2025年7月25日训练日志
  • Elasticsearch-8.17.0 centos7安装
  • Flink 自定义类加载器和子优先类加载策略
  • 第一章:Go语言基础入门之流程控制
  • k8s-MongoDB 副本集部署
  • 呼叫中心系统管理权限功能配置
  • gig-gitignore工具实战开发(四):使用ai辅助生成gitignore
  • 熵与交叉熵:从信息论到机器学习的「不确定性」密码
  • 有关于k8s中的CSI和CRI的有关知识
  • [硬件电路-85]:一款高集成度热电制冷器(TEC)控制器芯片ADN8835ACPZ
  • 【Docker项目实战】在Docker环境下部署go-file文件分享工具
  • SaaS型小程序自动化发布解决方案
  • 飞行控制领军者 | 边界智控携高安全级飞控系统亮相2025深圳eVTOL展
  • 大型微服务项目:听书——11 Redisson分布式布隆过滤器+Redisson分布式锁改造专辑详情接口
  • 巧用Proxy与异步编程:绕过浏览器安全限制实现文件选择器触发
  • 秋招Day19 - 分布式 - 分布式锁
  • 线性代数 下
  • 关于回归决策树CART生成算法中的最优化算法详解
  • 机器学习笔记(三)——决策树、随机森林
  • 水库大坝安全监测的主要内容
  • 在VSCode配置Java开发环境的保姆级教程(适配各类AI编程IDE)
  • 【内网穿透】使用FRP实现内网与公网Linux/Ubuntu服务器穿透项目部署多项目穿透方案