基于Linux下的vscode c/c++開發環境搭建詳細教程

vscode是文本編輯而非集成開發環境,需要經過配置才能在其上編譯執行代碼。本教程將具體詳解在linux上配置Visual Studio Code使用GCC C++ 編譯器(g++)和GDB調試器的方法(GCC是GNU 編譯器集合,GDB則是 GNU調試器)。 配置vscode后,將通過在VSCode中編譯和調試一個簡單的 C++程序告知您具體該如何操作。

一、先決條件

  1. 安裝Visual Studio Code.
  2. 安裝C++拓展。點擊在vscode界面最左側的Extensions圖標(打開快捷鍵:ctrl+shift+X),搜索“C/C++”,點擊進行安裝。(所有三個c/c++相關的全部安裝)

檢查是否安裝了gcc編譯器(終端輸入gcc -v)如果能夠正確打印出當前gcc的版本信息,則表示已經預裝。若沒有預裝,則用如下命令安裝安裝 GNU 編譯器工具和 GDB 調試器:

sudo apt update # 更新軟件包源 
sudo apt-get install build-essential gdb

二、配置相應環境

項目的配置文件位于.vscode文件夾下。在后續教程中,將具體說明在vscode中如何操作生成.vscode 文件夾下的三個配置文件:

tasks.json (compiler build settings) ,負責編譯
launch.json (debugger settings),負責調試

c_cpp_properties.json (compiler path and IntelliSense settings),負責更改路徑等設置

當然,也可以直接復制配置文件中的內容,以新建文件的方式生成配置文件。后續會對文件中的一些重要關鍵字進行解讀,了解配置文件中內容的具體作用。

2.1 編譯 Build
創建 tasks.json

在.vscode下創建tasks.json文件,它的作用是告訴 VS Code 如何構建(編譯)程序,將調用 g++編譯器從源代碼創建一個可執行文件。 在上方的主菜單中,選擇?Terminal>Configure Default Build Task?,將出現一個下拉菜單,顯示 C++ 編譯器的各種預定義編譯任務。選擇?C/C++: g++ build active file

上述操作將自動在.vscode文件夾下生成tasks.json文件。當然也可以在Explorer視圖中新建文件,將下面代碼復制進去,手動生成tasks.json,教程后面的配置文件也均可這樣生成。其中代碼類似如下:

{"tasks": [{"type": "cppbuild","label": "C/C++: g++ build active file","command": "/usr/bin/g++","args": ["-fdiagnostics-color=always","-g",// "${file}","${workspaceFolder}/*.cpp","-o","${fileDirname}/a.out"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "調試器生成的任務。"},],"version": "2.0.0"
}

注: VScode支持使用 ${variableName} 語法在配置文件中實現鍵值字符串的變量替換。tasks.json及后面為調試創建的launch.json文件中變量的具體說明可參考variable reference.

tasks.json中部分關鍵字說明:

command:?要運行的程序,此處是g++。

args: args 數組包含將傳遞給 g++ 的命令行參數(必須按照編譯器預期的順序指定)。"${file}"表示當前打開的待編譯的活動文件,對它進行編譯,并在當前路徑${fileDirname}生成與活動文件同名無后綴的可執行文件"${fileDirname}/${fileBasenameNoExtension}"。在本案例中活動文件指helloworld.cpp,所生成的可執行文件為helloworld。

label:?標簽值是將在任務列表中看到的內容;可以隨意命名它。

group中的isDefault: 值為true表示支持通過快捷鍵ctrl+shift+B來執行該編譯任務。如果值改為false,也可以從菜單中選擇運行:Terminal>Run Build Task。

修改tasks.json

可以修改 tasks.json來滿足一些特定需求。比如 將"${file}"替換“${workspaceFolder}/*.cpp”來構建多個 C++ 文件; 將“${fileDirname}/${fileBasenameNoExtension}”替換為硬編碼文件名(如“helloworld.out”)來修改輸出文件名。

2.3 調試Debug
創建launch.json

launch.json 文件用于在 Visual Studio Code 中配置調試器。接下來將創建launch.json 文件。

從主菜單中,選擇?Run > Add Configuration...,選擇C++ (GDB/LLDB)。 之后將看到展示各種預定義調試配置的下拉列表,選擇?g++ build and debug active file。將自動生成launch.json文件。

在編輯器中打開launch.json,具體內容類似如下:

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "g++ - Build and debug active file","type": "cppdbg","request": "launch","program": "${fileDirname}/a.out","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "C/C++: g++ build active file","miDebuggerPath": "/usr/bin/gdb"}]
}

這里千萬要確保task.json中的“-o”參數與launch.json中的program參數相同

task.json中的“label”參數與launch.json中的preLaunchTask參數相同

下面自己就可以寫一個hello world程序玩玩啦!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87796.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87796.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87796.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【EGSR2025】材質+擴散模型+神經網絡相關論文整理隨筆

MatSwap: Light-aware material transfers in images 介紹任務:輸入一張拍攝圖像、示例材質紋理圖像(這里跟BRDF無關,通常我們講到材質一般指的是SVBRDF,但是這里的材質指的只是紋理)、用戶為拍攝圖像指定的遮罩區域&…

WebRTC 雙向視頻通話

WebRTC 雙向視頻通話 一、項目概述 WebRTC(Web Real - Time Communication)是一種支持瀏覽器之間進行實時通信的技術,它使得在網頁上實現音視頻通話、文件共享等功能變得更加容易。為了體驗這個技術,所以我實現了webrtc - local…

Paimon lookup核心過程:分級查找、二分和緩存創建

LookupLevels LookupLevels 在 Paimon 中扮演著**“帶緩存的、基于 Key 的數據查找引擎”**的角色。它的核心使命是:當需要根據主鍵(Key)查找某條數據時,能夠高效地在 LSM-Tree 的多層(Levels)數據文件中定…

Ruby大會演講實錄:Baklib 如何用 AI 重構內容管理賽道

“2015 年成都 Ruby 大會時,我們還在做大數據項目;2025 年的今天,Baklib 已服務 800 多家企業。” 在 RubyConf China 2025 的演講臺上,Baklib 創始人Song以十年對比開篇,講述了從技術愛好者到企業服務創業者的蛻變&am…

408第三季part2 - 計算機網絡 - 傳輸層II

理解第一次和第二次握手是不能攜帶數據,只能消耗一個序號后面揮手也有第一次和第三次題目建立連接是1000,FIN揮手是5001,這兩個是不會帶數據的所以字節數范圍是1001-50005000-10011 4000c再次理解還可以叫快速重傳題目服務器想要100確認號客…

揭秘圖像LLM:從像素到語言的智能轉換

圖像LLM是怎么工作 圖像LLM(多模態大語言模型)的核心是將圖像轉化為語言模型能理解的“語言”,并與文本深度融合。以下結合CLIP、DALL-E、GPT-4V等主流模型,通過具體例子說明其工作機制: 一、圖像→特征向量:從像素到“密碼” 例子:識別“戴墨鏡的貓” 視覺編碼器提取…

十、K8s集群資源合理化分配

十、K8s集群資源合理化分配 文章目錄 十、K8s集群資源合理化分配1、K8s 資源限制 ResourceQuota1.1 什么是ResourceQuota?1.2 ResourceQuota通常用于如下場景:1.3 基于租戶和團隊的資源限制1.4 基于命名空間的資源限制 2、K8s 資源限制 LimitRange2.1 設…

Android 13 設置界面會判斷當前屏幕的大小,如果是大屏,則為左右屏顯示

1.前言 在13.0的系統rom定制化開發中,在某些時候,在大屏設備中,設置新增了左右分屏的功能,就是 左邊顯示主菜單,右邊顯示一級菜單的功能,某些情況下不需要,接下來關閉這個功能 2.設置界面會判斷當前屏幕的大小,如果是大屏,則為左右屏顯示的核心類 packages/apps/Sett…

算法學習day15----藍橋杯--進制轉換

python代碼:def jinzhizhuanhuan(x, n):ans 0while x > 0:ans x % nx // nreturn ans sum 0 for i in range(1, 2025):if jinzhizhuanhuan(i, 2) jinzhizhuanhuan(i, 4):sum 1 print(sum)雖然結束了期末周,但是又變懶了不少,水一個先…

OpenStack擴展

一、OpenStack (開源云計算管理平臺)的核心服務組件及功能計算服務(Compute - Nova)功能:是 OpenStack 計算資源管理的核心組件,負責虛擬機實例全生命周期管理,像實例的創建、啟動、暫停、遷移、…

【LeetCode 熱題 100】41. 缺失的第一個正數——(解法二)原地哈希

Problem: 41. 缺失的第一個正數 題目:給你一個未排序的整數數組 nums ,請你找出其中沒有出現的最小的正整數。 請你實現時間復雜度為 O(n) 并且只使用常數級別額外空間的解決方案。 【LeetCode 熱題 100】41. 缺失的第一個正數——(解法一&am…

C#上位機之Modbus通信協議!

文章目錄前言一、Modbus概念二、使用步驟1.使用Modbus準備2.使用步驟三、Modbus RTU 與 Modbus ASCII對比前言 Modbus通信協議! 一、Modbus概念 從站設備編碼(從站地址、單元ID),一主多從。 存儲區:0-線圈狀態、1-輸…

前后端分離架構下的跨域問題與解決方案

在現代Web開發中,特別是隨著前后端分離架構的普及,跨域問題成為了開發者必須面對的一個重要議題。本文將詳細介紹什么是跨域問題、其產生的原因以及如何從前端和后端兩個角度來解決這個問題,并提供一些實用的代碼示例。一、跨域問題概述1. 定…

搜索數據建設系列之數據架構重構

導讀 主要概述百度搜索業務數據建設的創新實踐,重點圍繞寬表模型設計、計算引擎優化和新一代業務服務交付模式(圖靈3.0開發模式)三大方向,解決了傳統數倉在搜索場景下面臨的諸多挑戰,實現了搜索數據建設的高效、穩定、…

2025年滲透測試面試題總結-2025年HW(護網面試) 29(題目+回答)

安全領域各種資源,學習文檔,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具,歡迎關注。、 目錄 2025年HW(護網面試) 29 1. 樣本分析思路 2. Linux GDB分析樣本示例 3. 應急案例:WebShell后…

動態編程入門第二節:委托與事件 - Unity 開發者的高級回調與通信藝術

動態編程入門第一節:C# 反射 - Unity 開發者的超級工具箱 動態編程入門第二節:委托與事件 - Unity 開發者的高級回調與通信藝術 上次我們聊了 C# 反射,它讓程序擁有了在運行時“看清自己”的能力。但光能看清還不夠,我們還需要讓…

降低網絡安全中的人為風險:以人為本的路徑

有效降低網絡安全中的人為風險,關鍵在于采取以人為本的方法。這種方法的核心在于通過高效的培訓和實踐,使員工掌握安全知識、踐行安全行為,并最終培育出安全且相互支持的文化氛圍。 誠然,技術和政策必須為良好的安全行為提供支持、…

opencv裁剪和編譯

opencv裁剪和編譯 0. 準備工作 0.1 下載和安裝Eigen 地址 https://eigen.tuxfamily.org/index.php?titleMain_Page對于opencv編譯,需要增加EIGEN_INCLUDE_PATH和開啟WITH_EIGEN -DWITH_EIGENON -DEIGEN_INCLUDE_PATH./3rd/eigen-3.4.01. 實際腳本 編譯腳本如下: ch…

小白成長之路-mysql數據基礎(三)

文章目錄一、主從復制二、案例總結一、主從復制 1、master開啟二進制日志記錄2、slave開啟IO進程,從master中讀取二進制日志并寫入slave的中繼日志3、slave開啟SQL進程,從中繼日志中讀取二進制日志并進行重放4、最終,達到slave與master中數據…

通過 Windows 共享文件夾 + 手機訪問(SMB協議)如何實現

通過 Windows 共享文件夾 手機訪問(SMB協議) 實現 PC 和安卓手機局域網文件共享,具體步驟如下: 📌 前置條件 電腦和手機連接同一局域網(同一個Wi-Fi或路由器)。關閉防火墻或放行SMB端口&#…