Linux下 VS Code 安裝與 C 編程環境配置!

        對於多文件的C項目,大部分人會選擇使用'cmake'來管理編譯過程,對於精力充沛的朋友來講,也能夠學習一下使用這個強大的工具。shell

        但我以爲若是隻想在VS Code裏寫幾行代碼應對當前需求,不必再去學習一個徹底陌生的東西,也不必把配置過程複雜化。編程

        因此我接下來說的配置多文件編譯的過程並不涉及'cmake'。json

 

目錄模式

        我將這種配置方式稱爲「目錄模式」,跟Eclipse相似,每一個目錄做爲一個項目。windows


 

        在上一篇中咱們講了如何進行單文件的編譯和調試,其中使用了VS Code提供的變量,以定位到當前文件。bash

        一樣地,咱們只須要再使用VS Code提供的變量,定位到當前目錄,再利用Linux Shell的通配符,便可匹配到當前目錄下全部要編譯的源文件。網絡

        gcc自己是支持多文件編譯的,只須要把文件名做爲參數便可。工具

        配置好的tasks.json文件大體以下:性能

{

    "version": "2.0.0",

    "tasks": [

        {

            "type": "shell",

            "label": "build(gcc)",

            "command": "gcc",

            "args": [

                "-g",

                "-o",

                "/tmp/buildtempc",

                "*.c"                  // 匹配全部源文件

            ],

            "options": {

                "cwd": "${fileDirname}" // 定位到當前目錄

            },

            "group": {

                "kind": "build",

                "isDefault": true

            }

        }

    ]

}

 

        配置好的launch.json文件大體以下:學習

{

    "version": "0.2.0",

    "configurations": [

        {

            "name": "debug(gdb)",

            "type": "cppdbg",

            "request": "launch",

            "program": "/tmp/buildtempc",

            "args": [],

            "stopAtEntry": false,

            "cwd": "${fileDirname}",    // 定位到當前目錄

            "environment": [],

            "externalConsole": false,

            "MIMode": "gdb",

            "setupCommands": [

                {

                    "description": "Enable pretty-printing for gdb",

                    "text": "-enable-pretty-printing",

                    "ignoreFailures": true

                }

            ],

            "preLaunchTask": "build(gcc)",

        }

    ]

}

 

        注意:匹配源文件時必定要寫成'*.c',而不能寫成'*'。由於頭文件不是編譯單元,頭文件在編譯源文件時被處理。ui

        在個人配置文件裏,我將可執行文件放在了'/tmp'目錄下,以使工做目錄看起來簡潔一些。

        '.vscode'目錄下的配置文件對工做空間下的全部目錄和文件都是有效的,如今咱們只須要新建一個目錄,並在裏面寫好頭文件和源文件,就能夠編譯和調試了。


 

目錄模式有一些缺陷:

        ✿ 頭文件和源文件放在一塊兒會比較亂

        ✿ 項目變多的時候,工做空間會比較亂

        ✿ ‘C/C++’擴展會掃描工做空間內的全部文件,若是項目變多會下降擴展性能,也會使擴展功能混亂

 

授之以魚不如授之以漁。

我強烈建議不要直接複製個人配置文件,而是要理解每一個配置選項的意義和目的,從而寫出符合我的喜愛的配置。

 

項目模式

        對於目錄模式來講,若是工做空間的項目變多,就會出現麻煩。因此在項目模式裏,每一個項目獨佔一個工做空間,相似VS的解決方案。

        由於一個項目獨佔一個工做空間,因此咱們不必把全部文件都擠在一塊兒,還能夠再細分。好比我喜歡分爲「頭文件」、「源文件」、「資源文件」。

        「資源文件」目錄用於調試程序的相對位置讀寫,或者存放一些與編譯無關的其餘文件。每個類別創建一個目錄。


 

        'C/C++'擴展會掃描工做空間下的全部文件,因此在寫#include時不須要指定文件夾,代碼提示也能正常工做。

        可是gcc在編譯時只會查找源文件所在目錄下的頭文件,因此須要額外參數指定頭文件目錄。

        另外,也須要指定須要編譯的源文件目錄。

        而資源文件與編譯過程無關,須要修改調試的配置文件。

        配置好的tasks.json文件大體以下:

{

    "version": "2.0.0",

    "tasks": [

        {

            "type": "shell",

            "label": "build(gcc)",

            "command": "gcc",

            "args": [

                "-g",

                "-o",

                "/tmp/buildtempc",

                "-iquote",                  // 指定頭文件目錄

                "Headers",                  // 頭文件目錄

                "Sources/*.c"              // 源文件目錄下的全部源文件

            ],

            "options": {

                "cwd": "${workspaceFolder}" // 定位到工做空間

            },

            "group": {

                "kind": "build",

                "isDefault": true

            }

        }

    ]

}

 

        配置好的launch.json文件大體以下:

{

    "version": "0.2.0",

    "configurations": [

        {

            "name": "debug(gdb)",

            "type": "cppdbg",

            "request": "launch",

            "program": "/tmp/buildtempc",

            "args": [],

            "stopAtEntry": false,

            "cwd": "${workspaceFolder}/Resources",  // 定位到資源文件目錄

            "environment": [],

            "externalConsole": false,

            "MIMode": "gdb",

            "setupCommands": [

                {

                    "description": "Enable pretty-printing for gdb",

                    "text": "-enable-pretty-printing",

                    "ignoreFailures": true

                }

            ],

            "preLaunchTask": "build(gcc)",

        }

    ]

}

 

        這樣,就能夠跟VS同樣在項目中寫代碼了。


 

        固然,這種配置方法的缺點也顯而易見。新建一個項目的成本太大了,每新建一個項目就得再寫一次配置文件,並新建三個目錄。

        不過,在Linux下,這些重複的工做固然是交給計算機來作。咱們只須要保存一份'.vscode'模板就好,好比我保存在變量CODE_PATH表示的目錄下。每一個項目的配置文件都是同樣的,直接拷貝就好。

        Bash腳本以下: 

#!/bin/bash

# Filename: project-c

# Create a C project, and open it in vscode.

echo -n "project name: "

read name

name=$(date +%Y%m%d)-"$name"        // 生成項目名

mkdir "$CODE_PATH"/"$name"          // 新建項目目錄

cd "$CODE_PATH"/"$name"

cp -r "$CODE_PATH"/.vscode .        // 拷貝配置文件

mkdir Headers Sources Resources    // 新建分類目錄

code .                              // 使用VS Code打開項目

cd - &> /dev/null

 

        在腳本中,我給項目名稱加上了時間戳,方便查找與避免重名。啓動VS Code的命令是code。


 

無論你是轉行也好,初學也罷,進階也可

——【值得關注】個人C/C++編程學習進階俱樂部 ——

涉及到:C語言、C++、windows編程、網絡編程、QT界面開發、Linux編程、遊戲編程、黑客等等......

相關文章
相關標籤/搜索