40 VSCode下.json文件的編寫——(1) linux/g++ (2).json中參數與預定義變量的意義解釋


0 引言

轉入linux/VSCode編程之后,迫切了解到有必有較為系統地學習一下VSCode中相關配置文件的寫法。下面將分為 linux/g++編譯指令、.json文件關鍵詞/替換變量的意義、編譯鏈接過程原理分析幾個部分進行介紹,並以opencv為例,將上述知識綜合運用。

1 linux/g++編譯指令介紹

參照BattleScars的博客,摘取其中對本文有用的部分進行運用,博客鏈接如下,質量非常之高,表示感謝!!!

https://www.cnblogs.com/battlescars/p/cpp_linux_gcc.html

(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://blog.csdn.net/lin_008/article/details/77600483

  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",                           
                "-l",                                    // 鏈接庫文件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://blog.csdn.net/bat67/article/details/78302871?locationNum=4&fps=1
${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}:系統中的環境變量

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM