關于新學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
英文地址,請注明出處:http://en.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;各自展現出獨特的優勢與特點。下…