vscode添加源文件_VSCode自制的IDE编译多个源文件
文/Edward
VSCode的預(yù)定義變量
我們上一篇文章中講述了如何將MinGW工具嵌入到VSCode文本編輯器中,在這個配置的過程中,我們只需要通過修改VSCode生成的“l(fā)uanch.json”和“task.json”兩個JSON文件中的特定字段,就可以實現(xiàn)開發(fā)環(huán)境的搭建。那么這里可能就會有讀者疑惑了,這些字段既然是VSCode提供的,那么有沒有一張詳細(xì)羅列這些參數(shù)的表格,以備自己的不時之需。這個答案是肯定的,VSCode編輯器的官網(wǎng)有相關(guān)的文檔專門來解釋這些JSON文檔中的關(guān)鍵字段,詳情可以參考VSCode官方文檔:https://code.visualstudio.com/docs/editor/variables-reference。這里我們也來簡單地講述下。
圖1 task.json
如圖1所示的“task.json”中的內(nèi)容。這個文件中的后綴名是“.json”,關(guān)于“json”我們在這里簡單介紹下,JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數(shù)據(jù)交換格式。它基于 ECMAScript (歐洲計算機協(xié)會制定的js規(guī)范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。簡潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言。
JSON文件的內(nèi)容都是以“鍵-值對”的形式存在的,鍵值對是一種高級語言廣泛支持的符合數(shù)據(jù)類型,在某些高級語言中也被稱為“字典”,其內(nèi)部的每一個數(shù)據(jù)項的結(jié)構(gòu)為:
索引(鍵)”: “內(nèi)容(值)
在VSCode中,它提供兩個用以配置VSCode任務(wù)的文件,“l(fā)aunch.json”以及”tasks.json”。“l(fā)aunch.json”為調(diào)試配置文件,這里面指定了啟動調(diào)試之后的調(diào)試器命令,以及調(diào)試之前的任務(wù)。這里我們可以將編譯任務(wù)在這里指出。
“task.json”為編譯任務(wù)配置文件,這里指出了編譯任務(wù)的命令以及具體參數(shù)。
再仔細(xì)觀察圖1,我們發(fā)現(xiàn)其中很多字段對應(yīng)的變量是以“${變量名}”形式出現(xiàn)的,這些變量名其實在VSCode中是被事先定義好的,有點類似于我們操作系統(tǒng)中的環(huán)境變量,其中部分變量的具體解釋如下:
$ {workspaceFolder} -在VS Code中打開的文件夾的路徑
$ {workspaceFolderBasename} -在VS Code中打開的文件夾名稱,不帶任何斜杠(/)
$ {file} -當(dāng)前打開的文件
$ {fileWorkspaceFolder} -當(dāng)前打開的文件的工作區(qū)文件夾
$ {relativeFile} -當(dāng)前相對于打開的文件workspaceFolder
$ {relativeFileDirname} -當(dāng)前打開的文件相對于的目錄名workspaceFolder
$ {fileBasename} -當(dāng)前打開的文件的基本名稱
$ {fileBasenameNoExtension} -當(dāng)前打開的文件的基本名稱,沒有文件擴展名
$ {fileDirname} -當(dāng)前打開的文件的目錄名
$ {fileExtname} -當(dāng)前打開的文件的擴展名
$ {cwd} -啟動時任務(wù)運行程序的當(dāng)前工作目錄
$ {lineNumber} -活動文件中當(dāng)前選擇的行號
$ {selectedText} -活動文件中的當(dāng)前選定文本
$ {execPath} -正在運行的VS Code可執(zhí)行文件的路徑
$ {defaultBuildTask} -默認(rèn)構(gòu)建任務(wù)的名稱
$ {pathSeparator} -操作系統(tǒng)用來分隔文件路徑中的組件的字符
編譯多個源文件
到目前為止,我們講述的VSCode C語言編譯器貌似還是只支持單一源文件的編譯。那么如果我有兩個,三個甚至多個源文件的編譯,是不是需要像之前講述的那樣寫Makefile?
要回答這個問題,最好的辦法就是立即動手寫代碼,我們可以在同一個文件夾中創(chuàng)建一個“a.c”和“a.h”文件,這個文件中只實現(xiàn)輸出一句“Hello world”的功能。定義好函數(shù)之后,我們在“main.c”文件中去包含這個“a.h”,接著去調(diào)用a.h中聲明的打印函數(shù),具體代碼如圖2所示。
圖2 新增的“a.c”和“a.h”
//main.c#include#include "a.h"int main(void){int number;printf("input:\n");scanf("%d", &number);printHello();if((number > 1) && (number <= 100)) {printf("Small\n");} else if((number > 101) && (number <= 200)) {printf("Middle\n");} else {printf("Large\n");}return 0;}//a.c#include#include "a.h"void printHello(void){printf("Hello world");}//a.h#ifndef __A_H_#define __A_H_void printHello(void);#endif
然后,我們在上一篇文章編寫的“l(fā)aunch.json”和“task.json”文件基礎(chǔ)上進(jìn)行調(diào)試。結(jié)果VSCode拋出了如圖3所示的錯誤。
圖3 編譯輸出錯誤
我們在終端上可以看到其出錯的原因,歸根到底是因為沒有找到“main.c”文件中的“printHello”函數(shù)定義,這個原因是因為編譯器其實是沒有編譯a.c這個源文件。那如何才能添加對這個源文件的編譯呢?我們再仔細(xì)來看下,終端提示的錯誤中,在執(zhí)行 “D:\software\mingw64\bin\gcc.exe '-g', 'C:\Users\1\Desktop\NumCal\main.c', '-o', 'C:\Users\1\Desktop\NumCal\main.exe'”語句時退出的,這句語句其實是我們在“task.json”文件中定義的。
圖4 task.json
如圖4紅框中圈出的便是具體的編譯命令,因此我們在這個編譯命令中只需要增加對“a.c”文件的編譯即可。如圖5所示,在原有的“task.json”文件基礎(chǔ)上,增加了對“a.c”文件的編譯。
圖5 “task.json”中,增加對a.c文件的編譯
//task.json{"version": "2.0.0","label": "C/C++: gcc.exe build active file","command": "gcc","args": ["-g","${file}","${fileDirname}\\a.c", //增加對a.c文件的編譯"-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"problemMatcher": ["$gcc"],"group": "build","detail": "compiler: D:\\software\\mingw64\\bin\\gcc.exe",}
//launch.json{// 使用 IntelliSense 了解相關(guān)屬性。// 懸停以查看現(xiàn)有屬性的描述。// 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "build and debug", // 配置名稱,將會在啟動配置的下拉菜單中顯示"type": "cppdbg", // 配置類型,這里只能為cppdbg"request": "launch", // 請求配置類型,可以為launch(啟動)或attach(附加)"program": "${fileDirname}/${fileBasenameNoExtension}.exe",// 將要進(jìn)行調(diào)試的程序的路徑"args": [], // 程序調(diào)試時傳遞給程序的命令行參數(shù),一般設(shè)為空即可"stopAtEntry": false, // 設(shè)為true時程序?qū)和T诔绦蛉肟谔?#xff0c;一般設(shè)置為false"cwd": "${fileDirname}", // 調(diào)試程序時的工作目錄,一般為${fileDirname}即代碼所在目錄"environment": [],"externalConsole": true, // 調(diào)試時是否顯示控制臺窗口,一般設(shè)置為true顯示控制臺"MIMode": "gdb","miDebuggerPath": "D:/software/mingw64/bin/gdb.exe", // miDebugger的路徑,注意這里要與MinGw的路徑對應(yīng)"preLaunchTask": "gcc", // 這里需要添加一個參數(shù),//調(diào)試會話開始前執(zhí)行的任務(wù),一般為編譯程序,c++為g++, c為gcc"setupCommands": [{"description": "為 gdb 啟用整齊打印","text": "-enable-pretty-printing","ignoreFailures": true}]}]}
接著,我們切換回“main.c”,再點擊調(diào)試代碼,此時VSCode就可以正常進(jìn)入調(diào)試界面了。如圖6所示。
圖6?VSCode調(diào)試界面
總結(jié)
以上是生活随笔為你收集整理的vscode添加源文件_VSCode自制的IDE编译多个源文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 618来袭 市监管总局公布新规:禁止价格
- 下一篇: 3A和5A的数据线有什么区别?数据传输速