VSCode下.json文件的編寫之(1) linux/g++ (2).json中參數(shù)與預(yù)定義變量的意義解釋
0 引言
轉(zhuǎn)入linux/VSCode編程之后,迫切了解到有必有較為系統(tǒng)地學(xué)習(xí)一下VSCode中相關(guān)配置文件的寫法。下面將分為 linux/g++編譯指令、.json文件關(guān)鍵詞/替換變量的意義、編譯鏈接過(guò)程原理分析幾個(gè)部分進(jìn)行介紹,并以opencv為例,將上述知識(shí)綜合運(yùn)用。
1 linux/g++編譯指令介紹
參照BattleScars的博客,摘取其中對(duì)本文有用的部分進(jìn)行運(yùn)用,博客鏈接如下,質(zhì)量非常之高,表示感謝?。?!
http://www.dhdzp.com/article/183540.htm
(1)針對(duì)一個(gè)完整的、單一的.cpp文件,helloworld.cpp,其編譯指令如下。
$ g++ helloworld.cpp
編譯器g++通過(guò)檢查命令行中指定的文件的后綴名可識(shí)別其為C++源代碼文件。編譯器默認(rèn)的動(dòng)作:編譯源代碼文件生成對(duì)象文件(object file),鏈接對(duì)象文件和c++庫(kù)中的函數(shù)得到可執(zhí)行程序。然后刪除對(duì)象文件。由于命令行中未指定可執(zhí)行程序的文件名,編譯器采用默認(rèn)的a.out。程序的運(yùn)行方式如下,
$ ./a.out
如果要指定可執(zhí)行程序的文件名,使用 "-o"參數(shù),如下,
$ g++ -std=c++11 helloworld.cpp -o helloworld
暫時(shí)了解到這里就可以了,在編譯多個(gè)源文件生成可執(zhí)行程序時(shí),可參照上述博客內(nèi)容。
(2)g++相關(guān)參數(shù)的意義
參考了此貼,表達(dá)感謝!
http://www.dhdzp.com/article/183542.htm
1 g++ -I[path](大寫的i,即include path) 編譯程序按照指定的路徑去搜索頭文件,指定的路徑為第一個(gè)去尋找的路徑,eg
g++ -I/usr/include
2 g++ -L[lib](大寫的L) 編譯程序按照-L指定的路徑進(jìn)去尋找文件,一般的在-L的后面可以一次用-l指定多個(gè)庫(kù)文件 ,eg
g++ -L/usr/lib/x86_64-linux-gnu
3 g++ -l [掐頭去尾的庫(kù)名](小寫L) 編譯程序到系統(tǒng)默認(rèn)路徑尋找?guī)煳募?,?kù)文件的格式如下。
g++ -lz #庫(kù)文件的名稱為libz.so,庫(kù)名為z
如果找不到,那么到當(dāng)前目錄下找;如果還找不到,那么到LD_LIBRARY_PATH等環(huán)境變量置頂?shù)穆窂街腥ゲ檎?;如果仍然找不到,那么編譯程序提示找不到庫(kù)。
2 .json文件參數(shù)的意義
VSCode采用.json結(jié)尾的文件作為配置文件,包含關(guān)鍵詞和相關(guān)參數(shù)兩個(gè)部分。以本人編寫的opencv中的參數(shù)文件為例進(jìn)行解釋,如下。
(1)launch.json
參考了VSCode官網(wǎng)上的兩個(gè)帖子,鏈接如下。
https://code.visualstudio.com/docs/languages/cpp # c++編程環(huán)境配置https://code.visualstudio.com/docs/editor/debugging#_launch-configurations #詳細(xì)解釋了launch.json中的參數(shù)的含義
為了能夠debugging,需要生成一個(gè)launch.json文件,Linux下VSCode支持的的調(diào)試器為GDB,配置時(shí)點(diǎn)擊configure按鈕并選擇 c++(GDB/LLDB),即可創(chuàng)建一個(gè)launch.json文件.
其中,preLauchTask可將launch.json和tasks.json文件關(guān)聯(lián)起來(lái),用于在調(diào)試前完成build任務(wù)。
{
// 使用 IntelliSense 了解相關(guān)屬性。
// 懸停以查看現(xiàn)有屬性的描述。
// 欲了解更多信息,請(qǐng)?jiān)L問(wèn): https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 強(qiáng)制:就一個(gè)名字而已,但是是必須要有的
"type": "cppdbg", // 強(qiáng)制:調(diào)試器的類型,Node debugger for node, php for PHP , go for GO
"request": "launch", // 強(qiáng)制:launch/attach
"program": "${workspaceFolder}/${fileBasenameNoExtension}.out", // 可執(zhí)行文件的路徑
"miDebuggerPath": "/usr/bin/gdb", // 調(diào)試器的位置
"preLaunchTask":"build", // 調(diào)試前編譯任務(wù)名稱
"args": [], // 調(diào)試參數(shù)
"stopAtEntry": false,
"cwd": "${workspaceFolder}", // 當(dāng)前工作目錄
"environment": [], // 當(dāng)前項(xiàng)目環(huán)境變量
"externalConsole": true,
"MIMode": "gdb", // 調(diào)試器模式/類型
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
(2)tasks.json
參考了VSCode的兩個(gè)文檔,鏈接如下。
https://code.visualstudio.com/docs/languages/cpp # c++配置環(huán)境中的例子https://code.visualstudio.com/docs/editor/tasks#vscode # 專門介紹tasks.json的
想從VSCode中構(gòu)建應(yīng)用程序,必須要生成一個(gè)tasks.json文件。生成時(shí),需要指定編譯器為"g++",并在args[]中編寫 g++編譯指令.
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks":[ // 可以有多個(gè)任務(wù)
{
"label": "build", // 編譯任務(wù)名
"type": "shell", // 編譯任務(wù)的類型,通常為shell/process類型
"command": "g++", // 編譯命令
"args":[
"-g", // 該參數(shù)使編譯器在編譯的時(shí)候產(chǎn)生調(diào)試信息
"${workspaceFolder}/${fileBasename}", // 被編譯文件,通常為.cpp/.c/.cc文件等
"-I", // include path指令
"/usr/include",
"-L", // lib路徑
"/usr/lib/x86_64-linux-gnu",
"-l", // 鏈接庫(kù)文件1
"opencv_core",
"-l", // 鏈接庫(kù)文件2
"opencv_highgui",
"-o", // 生成指定名稱的可執(zhí)行文件
"${workspaceFolder}/${fileBasenameNoExtension}.out" /* -g hello.cpp -I/usr/include -L/usr/lib/x86_64-linux-gnu -lopencv_core -o hello.out */
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "cmakebuild",
"type": "shell",
"command": "cd build && cmake ../ && make", // shell 編譯命令,做并運(yùn)算,即前一命令執(zhí)行失敗,則后一命令也不執(zhí)行
"args": []
}
]
}
(3)預(yù)定義變量的意義解釋
參考了該貼,表示感謝。
http://www.dhdzp.com/article/183162.htm
${workspaceFolder} :表示當(dāng)前workspace文件夾路徑,如C:\Users\admin\Desktop\test
${workspaceRootFolderName}:表示workspace的文件夾名,如test
${file}:文件自身的絕對(duì)路徑,如C:\Users\admin\Desktop\test\.vscode\launch.json
${relativeFile}:文件在workspace中的路徑,如.vscode\launch.json
${fileBasenameNoExtension}:當(dāng)前文件的文件名,不帶后綴,如hello/launch
${fileBasename}:當(dāng)前文件的文件名,如 hello.cpp/launch.json等
${fileDirname}:文件所在的文件夾路徑,也即C:\Users\admin\Desktop\test\.vscode
${fileExtname}:當(dāng)前文件的后綴,也即.json
${lineNumber}:當(dāng)前文件光標(biāo)所在的行號(hào)
${env:PATH}:系統(tǒng)中的環(huán)境變量
總結(jié)
到此這篇關(guān)于VSCode下.json文件的編寫之(1) linux/g++ (2).json中參數(shù)與預(yù)定義變量的意義解釋的文章就介紹到這了,更多相關(guān)VSCode .json文件編寫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中運(yùn)算符重載的規(guī)則語(yǔ)法實(shí)例
今天小編就為大家分享一篇關(guān)于C++中運(yùn)算符重載的規(guī)則語(yǔ)法實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
C++使用棧實(shí)現(xiàn)括號(hào)匹配的代碼詳解
在編程中,括號(hào)匹配是一個(gè)常見(jiàn)問(wèn)題,尤其是在處理數(shù)學(xué)表達(dá)式、編譯器解析等任務(wù)時(shí),棧是一種非常適合處理此類問(wèn)題的數(shù)據(jù)結(jié)構(gòu),能夠精確地管理括號(hào)的匹配問(wèn)題,本文將通過(guò) C++ 代碼,詳細(xì)講解如何使用棧來(lái)實(shí)現(xiàn)括號(hào)匹配,需要的朋友可以參考下2025-02-02
C語(yǔ)言實(shí)現(xiàn)奇數(shù)階魔方陣的方法
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)奇數(shù)階魔方陣的方法,涉及數(shù)組及相關(guān)數(shù)學(xué)函數(shù)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
C語(yǔ)言實(shí)現(xiàn)二叉樹(shù)層次遍歷介紹
大家好,本篇文章主要講的是C語(yǔ)言實(shí)現(xiàn)二叉樹(shù)層次遍歷介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01
VScode配置cuda開(kāi)發(fā)環(huán)境的實(shí)現(xiàn)步驟
本文主要介紹了VScode配置cuda開(kāi)發(fā)環(huán)境的實(shí)現(xiàn)步驟,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
詳解C語(yǔ)言的exp()函數(shù)和ldexp()函數(shù)以及frexp()函數(shù)
這篇文章主要介紹了詳解C語(yǔ)言的exp()函數(shù)和ldexp()函數(shù)以及frexp()函數(shù),注意這三個(gè)函數(shù)雖然看起來(lái)相似但實(shí)際功能卻大相徑庭!需要的朋友可以參考下2015-08-08
C/C++ 實(shí)現(xiàn)簡(jiǎn)易HTTP服務(wù)器的示例
這篇文章主要介紹了C/C++ 實(shí)現(xiàn)簡(jiǎn)易HTTP服務(wù)器的示例,幫助大家更好的理解和學(xué)習(xí)C/C++編程,感興趣的朋友可以了解下2020-10-10
C語(yǔ)言實(shí)現(xiàn)的猴子吃桃問(wèn)題算法解決方案
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)的猴子吃桃問(wèn)題解決方案,較為詳細(xì)的分析了猴子吃桃問(wèn)題并給出了C語(yǔ)言算法的實(shí)現(xiàn)方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10

