1. 程式人生 > 實用技巧 >Linux下 VS Code 安裝與 C 程式設計環境配置!

Linux下 VS Code 安裝與 C 程式設計環境配置!

對於多檔案的C專案,大部分人會選擇使用'cmake'來管理編譯過程,對於精力充沛的朋友來說,也可以學習一下使用這個強大的工具。

但我覺得如果只想在VS Code裡寫幾行程式碼應對當前需求,沒必要再去學習一個完全陌生的東西,也沒必要把配置過程複雜化。

所以我接下來講的配置多檔案編譯的過程並不涉及'cmake'。

目錄模式

我將這種配置方式稱為“目錄模式”,跟Eclipse類似,每個目錄作為一個專案。


在上一篇中我們講了如何進行單檔案的編譯和除錯,其中使用了VS Code提供的變數,以定位到當前檔案。

同樣地,我們只需要再使用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',而不能寫成'*'。因為標頭檔案不是編譯單元,標頭檔案在編譯原始檔時被處理。

在我的配置檔案裡,我將可執行檔案放在了'/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程式設計、遊戲程式設計、黑客等等......