VSCode下.json檔案的編寫之(1) linux/g++ (2).json中引數與預定義變數的意義解釋
0 引言
轉入linux/VSCode程式設計之後,迫切瞭解到有必有較為系統地學習一下VSCode中相關配置檔案的寫法。下面將分為 linux/g++編譯指令、.json檔案關鍵詞/替換變數的意義、編譯連結過程原理分析幾個部分進行介紹,並以opencv為例,將上述知識綜合運用。
1 linux/g++編譯指令介紹
參照BattleScars的部落格,摘取其中對本文有用的部分進行運用,部落格連結如下,質量非常之高,表示感謝!!!
https://www.jb51.net/article/183540.htm
(1)針對一個完整的、單一的.cpp檔案,helloworld.cpp,其編譯指令如下。
$ g++ helloworld.cpp
編譯器g++通過檢查命令列中指定的檔案的字尾名可識別其為C++原始碼檔案。編譯器預設的動作:編譯原始碼檔案生成物件檔案(object file),連結物件檔案和c++庫中的函式得到可執行程式。然後刪除物件檔案。由於命令列中未指定可執行程式的檔名,編譯器採用預設的a.out。程式的執行方式如下,
$ ./a.out
如果要指定可執行程式的檔名,使用 "-o"引數,如下,
$ g++ -std=c++11 helloworld.cpp -o helloworld
暫時瞭解到這裡就可以了,在編譯多個原始檔生成可執行程式時,可參照上述部落格內容。
(2)g++相關引數的意義
參考了此貼,表達感謝!
https://www.jb51.net/article/183542.htm
1 g++ -I[path](大寫的i,即include path) 編譯程式按照指定的路徑去搜索標頭檔案,指定的路徑為第一個去尋找的路徑,eg
g++ -I/usr/include
2 g++ -L[lib](大寫的L) 編譯程式按照-L指定的路徑進去尋找檔案,一般的在-L的後面可以一次用-l指定多個庫檔案 ,eg
g++ -L/usr/lib/x86_64-linux-gnu
3 g++ -l [掐頭去尾的庫名](小寫L) 編譯程式到系統預設路徑尋找庫檔案,庫檔案的格式如下。
g++ -lz #庫檔案的名稱為libz.so,庫名為z
如果找不到,那麼到當前目錄下找;如果還找不到,那麼到LD_LIBRARY_PATH
等環境變數置頂的路徑中去查詢;如果仍然找不到,那麼編譯程式提示找不到庫。
2 .json檔案引數的意義
VSCode採用.json結尾的檔案作為配置檔案,包含關鍵詞和相關引數兩個部分。以本人編寫的opencv中的引數檔案為例進行解釋,如下。
(1)launch.json
參考了VSCode官網上的兩個帖子,連結如下。
https://code.visualstudio.com/docs/languages/cpp # c++程式設計環境配置https://code.visualstudio.com/docs/editor/debugging#_launch-configurations #詳細解釋了launch.json中的引數的含義
為了能夠debugging,需要生成一個launch.json檔案,Linux下VSCode支援的的偵錯程式為GDB,配置時點選configure按鈕並選擇 c++(GDB/LLDB),即可建立一個launch.json檔案.
其中,preLauchTask可將launch.json和tasks.json檔案關聯起來,用於在除錯前完成build任務。
{ // 使用 IntelliSense 瞭解相關屬性。 // 懸停以檢視現有屬性的描述。 // 欲瞭解更多資訊,請訪問: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0","configurations": [ { "name": "(gdb) Launch",// 強制:就一個名字而已,但是是必須要有的 "type": "cppdbg",// 強制:偵錯程式的型別,Node debugger for node,php for PHP,go for GO "request": "launch",// 強制:launch/attach "program": "${workspaceFolder}/${fileBasenameNoExtension}.out",// 可執行檔案的路徑 "miDebuggerPath": "/usr/bin/gdb",// 偵錯程式的位置 "preLaunchTask":"build",// 除錯前編譯任務名稱 "args": [],// 除錯引數 "stopAtEntry": false,"cwd": "${workspaceFolder}",// 當前工作目錄 "environment": [],// 當前專案環境變數 "externalConsole": true,"MIMode": "gdb",// 偵錯程式模式/型別 "setupCommands": [ { "description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true } ] } ] }
(2)tasks.json
參考了VSCode的兩個文件,連結如下。
https://code.visualstudio.com/docs/languages/cpp # c++配置環境中的例子https://code.visualstudio.com/docs/editor/tasks#vscode # 專門介紹tasks.json的
想從VSCode中構建應用程式,必須要生成一個tasks.json檔案。生成時,需要指定編譯器為"g++",並在args[]中編寫 g++編譯指令.
{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0","tasks":[ // 可以有多個任務 { "label": "build",// 編譯任務名 "type": "shell",// 編譯任務的型別,通常為shell/process型別 "command": "g++",// 編譯命令 "args":[ "-g",// 該引數使編譯器在編譯的時候產生除錯資訊 "${workspaceFolder}/${fileBasename}",// 被編譯檔案,通常為.cpp/.c/.cc檔案等 "-I",// include path指令 "/usr/include","-L",// lib路徑 "/usr/lib/x86_64-linux-gnu","-l",// 連結庫檔案1 "opencv_core",// 連結庫檔案2 "opencv_highgui","-o",// 生成指定名稱的可執行檔案 "${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 編譯命令,做並運算,即前一命令執行失敗,則後一命令也不執行 "args": [] } ] }
(3)預定義變數的意義解釋
參考了該貼,表示感謝。
https://www.jb51.net/article/183162.htm
${workspaceFolder} :表示當前workspace資料夾路徑,如C:\Users\admin\Desktop\test ${workspaceRootFolderName}:表示workspace的資料夾名,如test ${file}:檔案自身的絕對路徑,如C:\Users\admin\Desktop\test\.vscode\launch.json ${relativeFile}:檔案在workspace中的路徑,如.vscode\launch.json ${fileBasenameNoExtension}:當前檔案的檔名,不帶字尾,如hello/launch ${fileBasename}:當前檔案的檔名,如 hello.cpp/launch.json等 ${fileDirname}:檔案所在的資料夾路徑,也即C:\Users\admin\Desktop\test\.vscode ${fileExtname}:當前檔案的字尾,也即.json ${lineNumber}:當前檔案游標所在的行號 ${env:PATH}:系統中的環境變數
總結
到此這篇關於VSCode下.json檔案的編寫之(1) linux/g++ (2).json中引數與預定義變數的意義解釋的文章就介紹到這了,更多相關VSCode .json檔案編寫內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!