无论您是否是《指环王》电影的粉丝,您都会同意几乎每个人都喜欢统一性,而拥有统一的开发体验是开发人员一直在努力和欢迎的东西。

长期以来,开发环境一直与特定技术紧密结合,例如 Visual Studio 主要用于 .NET 与 Windows 的开发。也看到开发人员之间的激烈争论,他们在无休止地争论一种工具与另一种工具的差别。

我相信这永远不会结束,也不应该结束,因为很多时候这些争论会产生我们今天正在使用的工具。

在本教程中,我们将与您分享如何在 Linux  构建 C 语言开发环境使用VS Code 编辑器。

如果您已经将 VS Code 与其他一些编程语言一起使用,那么您已经成功了一半。对于其他人,你们可以看看 Linux 用户都是怎么构建自己的开发环境,以及是否想尝试一下。

VS Code

VS Code 是一个轻量级、开源、自由且可扩展的 IDE,并且它每天都在变得更好。我经常在 Node.JS 开发工作中使用 VS Code。

C++教程:安装集成开发环境IDE | myfreax
一个集成开发环境IDE是一个软件包含了所有你需要开发,编译,链接和调试程序的工具。对于Windows用户建议安装Visual Studio 2019社区版。Linux用户请使用vscode或者Codeblock IDE

Fedora / CentOS 安装 C / C++ 开发工具

yum groupinstall 'Development Tools'

Ubuntu / Debian 安装 C / C++ 开发工具

sudo apt-get update
sudo apt-get install build-essential manpages-dev

安装 Vscode

VScode 具体安装方式请参考我们的教程如何在 Linux 安装 Vscode,教程包括在各种Linux 发行版安装 VScode。例如 CentOS,Ubuntu,Debian。

vscode - myfreax
myfreax是一个Linux爱好者和全栈开发者博客,发布Linux,Kotlin,Golang,Javascript,Typescript,ESP32,物联网,C/C++,Android,Flutter,Dart,Python,HTML,CSS,Shell,Bash,Node.js,CD/CI文章和教程
安装Vscode

安装 C / C++ for Visual Studio Code 扩展

打开你的 VS Code,在左侧工具栏中点击扩展图标按钮或者使用快捷键Ctrl+Shift+X  然后搜索 C/C++ 扩展,点击安装 Install。

配置 VS Code  C / C++扩展

如果你是一个JavaScript 开发者,也许会看不惯函数之后的中括号 { 换行。这种风格只有对长期使用不换行的人才就会形成强逼症,习惯已经养成难以改变。

但这是 C / C++ 的默认风格。如果你不想折腾请继续使用这种风格。毕竟是官方标准,形成这个习惯看很多 C / C++ 代码就不难了。

还有一点就是写着写着中括号不知道在那里。接下来我们改变这种函数后面中括号的换行的风格,比较工资不是按行数给的。

打开 VS Code 设置,找到 C / C++ 扩展设置,在搜索框中输入 format,找到 C_Cpp: Clang_format_fallback Style 设置。

这是一个输入框,可以输入值是 Visual StudioLLVMGoogleChromiumMozillaWebKitMicrosoftGNUnone

个人选择 Google 风格,Google 风格与 JavaScript 的代码风格可以说是一致。请根据你的个人喜好配置,这里不细说各个风格设置。你也可以直接以 JSON 格式编辑 VS Code 的设置文件。

{
    "C_Cpp.clang_format_fallbackStyle": "Google",
}

创建 C 语言项目

运行 cd命令切换到家目录并运行 mkdir 命令 mkdir -p cpp/helloworld 创建 C 语言项目。

#include <stdio.h>

int main() {
  char* message = "hello myfreax.com!\n";
  printf("%s", message);
  return 0;
}
main.c

VS Code 调试 C 语言项目

接下来配置VS Code,调试 C 语言代码。首先在你的项目根目录创建文件夹 .vscode。运行命令 mkdir -p .vscode

mkdir -p .vscode

.vscode 目录创建三个文件,分别是 c_cpp_properties.jsonlaunch.jsontasks.json

{
  "configurations": [
      {
          "name": "myfreax.com",
          "compilerPath": "/usr/bin/gcc",
          "cStandard": "c23",
          "cppStandard": "c++17",
          "includePath": [
              "${workspaceFolder}"
          ],
          "browse": {
              "path": [
                  "${workspaceFolder}"
              ],
              "limitSymbolsToIncludedHeaders": false
          }
      }
  ],
  "version": 4
}
c_cpp_properties.json

c_cpp_properties.json 文件主要是配置 C 语言项目 include 路径,以及使用C / C++的版本。

在这个示例中使用 C 的标准库版本是 C23,C++ 的标准库版本是 C17。include 路径是标准的 Linux 系统头文件路径和项目目录的 include 目录。

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C/C++: gcc build and debug active file",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}/${fileBasenameNoExtension}",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "miDebuggerPath": "/usr/bin/gdb",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "C: gcc build active file"
    }
  ]
}
launch.json

launch.json 文件主要用于指定可执行文件启动方式和选项,通常可执行程序启动方式可以在终端直接运行。

由于我们需要调试并运行运行程序,因此我们使用 gdb 调试器启动可执行文件。在 Linux gdb 调试器的默认路径是 /usr/bin/gdb。

在这里我们也说说一些重要的选项,program 指定可执行文件的绝对路径,cwd 指定工作目录,通常是项目根目录,${workspaceFolder} 表示项目根目录。

如果你的可执行文件需要传递参数,可以在 args 数组指定要传递的参数,environment  顾名思义,也就是环境变量,你可以在程序运行后获取指定的环境变量。

还有一个非常重要的选项是 preLaunchTask ,允许你在运行程序之前,执行指定的任务,在 C 语言的项目中,通常是编译项目。

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "shell",
      "label": "C: gcc build active file",
      "command": "/usr/bin/gcc",
      "args": [
        "-I",
        "${workspaceFolder}",
        "-g",
        "${file}",
        "${workspaceFolder}/libs.c",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}",
        "-lm",
        "-pthread"
      ],
      "options": {
        "cwd": "/usr/bin"
      },
      "problemMatcher": [
        "$gcc"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "Task generated by Debugger."
    }
  ]
}
tasks.json

tasks.json 文件主要用于编译 C 语言项目文件并生成一个可执行文件,可执行文件用于在启动调试时候使用。

tasks.json 文件中的 command 允许你指定编译器,在 Linux 默认是 gcc,但你需要指定绝对路径因此是 /usr/bin/gcc

args 用于指定 C 编译器的选项,你可以看到此示例中我们启用了线程(-pthread),数学(-lm)的标准库,并在根目录添加一个文件 libs.c

注意:如果你的项目根目录没有 libs.c  文件,请删除 libs.c

你可能还注意到一个奇怪的参数 ${fileDirname}/${fileBasenameNoExtension} ,其实这个参数是指定给 gcc 的 -o 选项, -o 选项指示 gcc 要生成的文件名称。

因此,你可以想到 ${fileDirname} 应该是当前活动的文件,${fileBasenameNoExtension} 顾名思义也就是没有扩展名的文件名。main.c 将会生成可执行文件 main。

当文件创建完成后,你可以按快捷键 ctrl+shift+b 仅构建项目,也可以直接按快捷键 F5 开始进行调试。

结论

至此,你已经熟悉如何在 Linux 使用 VS Code 构建 C 语言开发环境。如果你遇到任何问题,欢迎在下面发表评论。