使用CMAKE與VScode運行與調試C++

windows
1、環(huán)境搭建
下載cmake庵寞,選擇免安裝的版本,并將解壓后的cmake-3.22.2-windows-x86_64\bin目錄添加到環(huán)境變量

下載gcc調試器,選擇x86_64-posix-seh刮吧,并將解壓后的x86_64-8.1.0-release-win32-seh-rt_v6-rev0\mingw64\bin目錄添加到環(huán)境變量中

2、測試是否搭建成功
在cmd中輸入

gcc --version
cmake -version

沒有提示找不到就算成功

3掖蛤、下載vscode杀捻,并安裝插件
c/c++
cmake
cmake tools
4、在vscode中創(chuàng)建工程
創(chuàng)建一個簡單的c++工程蚓庭,文件目錄如下

.
├── build
├── CMakeLists.txt
├── include
│   └── swap.h
├── src
│   └── swap.cpp
└── main.cpp

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(shoot)
include_directories(include)
file(GLOB SRC "src/*.cpp")
add_executable(shoot main.cpp ${SRC})
set(CMAKE_BUILD_TYPE debug)

main.cpp

#include <iostream>
#include "swap.h"
using namespace std;
int main()
{
    SWAP swap(1, 2);
    swap.print_info();
    swap.run();
    swap.print_info();
}

swap.h

#pragma once
#include<iostream>
class SWAP
{
private:
    int _a;
    int _b;
public:
    SWAP(int a, int b)
    {
        this->_a = a;
        this->_b = b;
    }
    void run();
    void print_info();
};

swap.cpp

#include"swap.h"
using namespace std;
void SWAP::run()
{
    int temp;
    temp = _a;
    _a = _b;
    _b = temp;
}

void SWAP::print_info()
{
    cout<<"a = "<<_a<<" b = "<<_b<<endl;
}

5致讥、不使用vscode仅仆,單純使用cmake進行編譯
這一步可以跳過,只是為了表示vscode只是一個編輯和調用工具
進入build目錄垢袱,輸入

cmake -G "MinGW Makefiles" ..

進行makefile文件的構建墓拜,添加G "MinGW Makefiles"是因為如果你裝了vitual studio,會默認使用MSVC編譯器请契,這里強制使用gcc咳榜。
然后輸入

mingw32-make.exe

顯示

就表示代碼構建成功,此時build文件夾下面會有shoot.exe爽锥,運行就可以得到期望的結果

6涌韩、使用vscode進行代碼的調試的運行
本質上,vscode就是調用cmake進行項目的構建氯夷,所以臣樱,令人頭疼的launch.json與tasks.json其實也就只是調用cmake進行項目的編譯,然后調用gdb進行代碼的調試而已腮考。
創(chuàng)建.vscode文件夾
launch.json


{
   "version": "0.2.0",
   "configurations": [
       {
           "name": "Debug",
           "type": "cppdbg",
           "request": "launch",
           "args": [],
           "stopAtEntry": false,
           "cwd": "${workspaceFolder}",
           "environment": [],
           "externalConsole": false,
           "windows": {
               "MIMode": "gdb",
               "miDebuggerPath": "gdb.exe",
               "program": "${workspaceFolder}/build/main" // 重要的是這里雇毫,生成的可執(zhí)行文件的路徑,改自行修改
           },
           "preLaunchTask": "make"
       }
   ]
}

tasks.json
tasks.json就是純純的調用cmake進行構建秸仙,在命令行中執(zhí)行步驟5說的兩個語句

{   
  "version": "2.0.0",
  "options": {"cwd": "${workspaceFolder}/build"},
  "tasks": [
      {
          "type": "shell",
          "label": "cmake",
          "command": "cmake",
          
          "args": [
              "-G \"MinGW Makefiles\"",
              ".."
          ]
      },
      {
          "label": "make",
          "command": "mingw32-make.exe",
      },
      {
          "label": "build",
        "dependsOrder": "sequence", // 按列出的順序執(zhí)行任務依賴項
          "dependsOn":[
              "cmake",
              "make"
          ],
      }
  ]
}

修改快捷鍵
在編輯框輸入tasks.build嘴拢,修改快捷鍵為f4
此時,就能使用f4進行makefile的重新建立(如果修改了CMakeLists.txt)寂纪,f5進行編譯調試

7席吴、測試
返回main.cpp,隨便打一個斷點捞蛋,測試是否正常

正常調試與運行孝冒,完成。

Linux
linux下與windows下大同小異拟杉,不同的地方就只有gcc與cmake的安裝庄涡,vscode的兩個配置文件的區(qū)別
可以在建立后工程后點擊這個自動生成launch.json與tasks.json(默認都選第一項,會報錯不要管)

然后將launch.json中的可執(zhí)行程序替換成camke生成的

tasks.json
tasks.json不同的地方時用make而不是mingw32-make.exe

{   
  "version": "2.0.0",
  "options": {"cwd": "${workspaceFolder}/build"},
  "tasks": [
      {
          "type": "shell",
          "label": "cmake",
          "command": "cmake",
          
          "args": [
              ".."
          ]
      },
      {
          "label": "make",
          "command": "make",
      },
      {
          "label": "build",
        "dependsOrder": "sequence", // 按列出的順序執(zhí)行任務依賴項
          "dependsOn":[
              "cmake",
              "make"
          ],
      }
  ]
}

(29條消息) 使用CMAKE與VScode運行與調試C++_十香的黃豆粉面包的博客-CSDN博客_cmake 調試

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末搬设,一起剝皮案震驚了整個濱河市穴店,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拿穴,老刑警劉巖泣洞,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異默色,居然都是意外死亡球凰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呕诉,“玉大人缘厢,你說我怎么就攤上這事∷Υ欤” “怎么了贴硫?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長伊者。 經常有香客問我夜畴,道長,這世上最難降的妖魔是什么删壮? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮兑牡,結果婚禮上央碟,老公的妹妹穿的比我還像新娘。我一直安慰自己均函,他們只是感情好亿虽,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苞也,像睡著了一般洛勉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上如迟,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天收毫,我揣著相機與錄音,去河邊找鬼殷勘。 笑死此再,一個胖子當著我的面吹牛,可吹牛的內容都是我干的玲销。 我是一名探鬼主播输拇,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贤斜!你這毒婦竟也來了策吠?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤瘩绒,失蹤者是張志新(化名)和其女友劉穎猴抹,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體草讶,經...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡洽糟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坤溃。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡拍霜,死狀恐怖,靈堂內的尸體忽然破棺而出薪介,到底是詐尸還是另有隱情祠饺,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布汁政,位于F島的核電站道偷,受9級特大地震影響,放射性物質發(fā)生泄漏记劈。R本人自食惡果不足惜勺鸦,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望目木。 院中可真熱鬧换途,春花似錦、人聲如沸刽射。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辫继。三九已至骇两,卻和暖如春低千,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馏颂。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工救拉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人亿絮。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓黔姜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淮椰。 傳聞我的和親對象是個殘疾皇子主穗,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348