Visual?Studio?2022使用MinGW來(lái)編譯調(diào)試C/C++程序的圖文教程
Visual Studio的新版本已經(jīng)可以像VSCode一樣創(chuàng)建CMake項(xiàng)目了,但是默認(rèn)的情況下是使用的Visual Studio編譯器及調(diào)試器不包括MinGW中的工具集,參見(jiàn)下面的默認(rèn)可選工具集:
本文就以實(shí)例來(lái)簡(jiǎn)單介紹一下VS2022中如何使用MinGW來(lái)編譯、調(diào)試C/C++程序。
一、創(chuàng)建項(xiàng)目
首先,創(chuàng)建一個(gè)新項(xiàng)目:
然后,選擇CMake項(xiàng)目:
填寫(xiě)項(xiàng)目名稱(chēng),比如test
項(xiàng)目創(chuàng)建好后如下所示,由于筆者并未安裝VS的Windows C/C++開(kāi)發(fā)工具,也就沒(méi)有VS的C/C++編譯、調(diào)試器,所以會(huì)報(bào)錯(cuò)。
二、配置CMake
在VS2022中CMake的配置有兩個(gè)文件,一個(gè)是“CMakePresets.json”,另一個(gè)是“CMakeSettings.json”,在VS的“工具”/“選項(xiàng)”/“CMake”/“常規(guī)”中可以進(jìn)行設(shè)置使用哪個(gè)文件來(lái)進(jìn)行CMake配置,如下圖所示:
默認(rèn)是如果有“CMakePresets.json”則使用“CMakePresets.json”,否則使用“CMakeSettings.json”。
下面就分別介紹如何使用這兩個(gè)文件來(lái)配置CMake,二選一即可。
1.修改“CMakePresets.json”預(yù)設(shè)編譯工具集
新建項(xiàng)目后,默認(rèn)是生成了“CMakePresets.json”,打開(kāi)“CMakePresets.json”,可以看到默認(rèn)的編譯是cl.exe
為了使用MinGW中編譯器,將之改為gcc.exe和g++.exe(必須在PATH路徑中可以找到),如下圖所示:
此時(shí)即可正常編譯了:
但是此時(shí)的智能感知識(shí)別并未正常工作,無(wú)法跳轉(zhuǎn)到定義,此時(shí)需要設(shè)置智能感知模式(intelliSenseMode),打開(kāi)“CMakePresets.json”,在cacheVariables后添加:
"vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "intelliSenseMode": "linux-gcc-x86" } }
即:
"cacheVariables": { "CMAKE_C_COMPILER": "gcc.exe", "CMAKE_CXX_COMPILER": "g++.exe" }, "vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "intelliSenseMode": "linux-gcc-x86" } },
如果是64位程序,則將"linux-gcc-x86"改為"linux-gcc-x64"。
2.使用CMake設(shè)置編輯器來(lái)配置CMake
新建的項(xiàng)目,默認(rèn)是生成的“CMakePresets.json”預(yù)設(shè)文件,先將之刪除掉或者在VS選項(xiàng)中設(shè)置CMake為“從不使用CMakePresets.json”,然后在項(xiàng)目中選擇“test的CMake設(shè)置”,此時(shí)項(xiàng)目中會(huì)創(chuàng)建一個(gè)CMakeSettings.json的文件
雙擊即可打開(kāi)CMake的設(shè)置編輯器,如下圖所示:
此時(shí)工具集中是默認(rèn)可用的工具集,可以看到并沒(méi)有MinGW。點(diǎn)擊右邊的“編輯JSON”,即可看到JSON格式的配置文件:
刪除"inheritEnvironments"所在行,并添加:
"variables": [ { "name": "CMAKE_C_COMPILER", "value": "gcc", "type": "FILEPATH" }, { "name": "CMAKE_CXX_COMPILER", "value": "g++", "type": "FILEPATH" } ], "intelliSenseMode": "linux-gcc-x64"
或者直接在配置中選中“x64-Debug"刪除掉
然后再添加MinGW配置
此時(shí)工具集中可以看到MinGW了:
在下面的CMake變量中可以看到重新定義了CMAKE_C_COMPILER和CMAKE_CXX_COMPILER變量:
如果沒(méi)有定義env.BIN_ROOT
變量則會(huì)找不到gcc和g++,可以直接使用PATH變量,所以把CMAKE_C_COMPILER改為gcc,CMAKE_CXX_COMPILER改為g++即可:
強(qiáng)烈推薦使用此方式來(lái)設(shè)置為MinGW,它會(huì)自動(dòng)設(shè)置intelliSenseMode為"linux-gcc-x64":
不管是使用CMake的預(yù)設(shè)文件“CMakePresets.json”還是“CMakeSettings.json”都只是設(shè)置了編譯器為MinGW中的gcc/g++,目前只能編譯,不能使用gdb調(diào)試。
三、配置調(diào)試
想要調(diào)試,需要做如下設(shè)置,在“解決方案資源管理器”中的CMakeLists.txt文件上右鍵,在彈出的菜單中選擇“添加調(diào)試配置”,如下圖所示:
然后在彈出的“選擇調(diào)試程序”對(duì)話框中選擇“MinGW/Cygin(gdb)的C/C++啟動(dòng)”,如下圖所示:
此時(shí)會(huì)創(chuàng)建一個(gè)launch.vs.json文件,如下圖所示:
將"projectTarget"設(shè)置為編譯的exe文件,這里為test.exe;把"miDebuggerPath"設(shè)置成"gdb.exe"(要求gdb.exe在PATH路徑中);將gdb的反匯編格式設(shè)置為intel格式,如下所示:
{ "version": "0.2.1", "defaults": {}, "configurations": [ { "type": "cppdbg", "name": "CMakeLists.txt", "project": "CMakeLists.txt", "projectTarget": "test.exe", "cwd": "${workspaceRoot}", "program": "${debugInfo.target}", "MIMode": "gdb", "miDebuggerPath": "gdb.exe", "externalConsole": true, "setupCommands": [ { "description": "為 gdb 啟用整齊打印", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "將反匯編風(fēng)格設(shè)置為 Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ] } ] }
再把調(diào)試目標(biāo)設(shè)置為“CMakeLists.txt”,
此時(shí)我們直接按F5鍵即可進(jìn)行調(diào)試:
至此就可以暢快地在Visual Studio中使用MinGW開(kāi)發(fā)調(diào)試C/C++程序了。
到此這篇關(guān)于Visual Studio 2022使用MinGW來(lái)編譯調(diào)試C/C++程序的文章就介紹到這了,更多相關(guān)Visual Studio 2022調(diào)試C/C++程序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C/C++實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的示例詳解
動(dòng)態(tài)數(shù)組相比于靜態(tài)數(shù)組具有更大的靈活性,因?yàn)槠浯笮】梢栽谶\(yùn)行時(shí)根據(jù)程序的需要?jiǎng)討B(tài)地進(jìn)行分配和調(diào)整,本文為大家介紹了C++實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的方法,需要的可以參考下2023-08-08C++基于人工智能搜索策略解決農(nóng)夫過(guò)河問(wèn)題示例
這篇文章主要介紹了C++基于人工智能搜索策略解決農(nóng)夫過(guò)河問(wèn)題,簡(jiǎn)單描述了農(nóng)夫過(guò)河問(wèn)題的概念、實(shí)現(xiàn)原理并結(jié)合具體實(shí)例形式給出了C++使用人工智能搜索策略解決農(nóng)夫過(guò)河問(wèn)題的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12C語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)之樹(shù)、森連、二叉樹(shù)之間的轉(zhuǎn)換圖解
這篇文章主要介紹了C語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)之樹(shù)、森連、二叉樹(shù)之間的轉(zhuǎn)換詳解,數(shù)據(jù)是信息的載體,是描述客觀事物屬性的數(shù)、字符以及所有能輸入到計(jì)算機(jī)中并被程序識(shí)別和處理的符號(hào)的集合,需要的朋友可以參考下2023-07-07基于C++實(shí)現(xiàn)的各種內(nèi)部排序算法匯總
這篇文章主要介紹了基于C++實(shí)現(xiàn)的各種內(nèi)部排序算法,非常經(jīng)典,需要的朋友可以參考下2014-08-08