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编程、游戏编程、黑客等等......

相关文章
相关标签/搜索