TLDR;

Linux 云端编辑器

使用 WSL 运行

如何在 Linux 环境下 运行 C 语言项目?_c++

先上最简单的方法:直接使用 Linux 系统的云端编辑器自动配置环境,然后编译。操作起来没有什么技术难度,最简单、最快捷的方法。

以 Lightly C 语言在线编译器为例,开始使用后直接新建一个 C 语言项目就可以开始在线写代码。如果项目代码已经写好了,也可以直接从客户端上传导入。

如何在 Linux 环境下 运行 C 语言项目?_编译器_02

进入编程界面后,可以在下方的【终端】栏中输入命令,分别输入 ​​uname -a​​​ 及 ​​clang --version​​​ 查看 C 语言在线编译器 的系统及编译器信息。

如何在 Linux 环境下 运行 C 语言项目?_linux_03

编写完代码后,直接点击右上角的 ​​运行​​​ 按钮就可以在线编译 C 语言项目了。

如何在 Linux 环境下 运行 C 语言项目?_c++_04

除了使用一键运行的方法外,你同样也可以通过终端命令行输入 ​​clang main.c​​​,在 C 语言在线编译器​中将项目导出为 a.out 文件。然后,再输入 ​​./a.out​​​ 在终端运行。注:​​.out​​​ 后缀的文件是 Linux 系统的可执行文件,与 Windows 系统下的 ​​.exe​​ 文件类似。

如何在 Linux 环境下 运行 C 语言项目?_c++_05

编译 C 语言程序显然是学习 C 语言时的一门必修课,但初学 C 语言编程的时候,其实并没有必要把大力气花在环境配置上,而是更专注于编写代码、算法等更重要的部分。

很多同学在学习编程的时候,容易落入所谓的专业性、技术正确甚至是逼格这样的思维陷阱里,在安装系统、配置环境、选择编辑器、安装编译器等步骤下了大量功夫,结果还没真正开始学编程就耗尽了心力,解锁了从入门到放弃的成就。

大家在学习编程的过程中其实可以不必耻于选择更简单、时效更大的入门方式,借助 C 语言在线编译器等已有的工具直接从最重要的语法、算法、实操项目开始下手,然后再慢慢从这段学习过程中,一点一点地学习其中的系统、软硬件知识,而不至于虎头蛇尾。

回到正题。

C 语言在计算机科学的各类编程语言中一直具有相当高的地位,虽然后起的 Python 在数据科学、机器学习等方面已逐渐占据雄风,但这丝毫不影响曾经写出 Windows、MacOS、Linux 等我们现在使用的计算机系统,甚至 Python 的主要实施方式也是由 C 语言编写的。

作为高级语言,编译 C 语言的过程基本上是这样的:

如何在 Linux 环境下 运行 C 语言项目?_编译器_06

在前面介绍的 C 语言在线编译器一键运行的方法中,这个编译过程并不会完全体现,看起来更像是“源代码 > 编译器 > 可执行文件”这样的过程。学会编程以后,编译流程自然是绕不开的知识点,但大家也会更容易明白程序与终端之间的交互,同时也更容易理解这几个流程之间的关系。


Windows Subsystem for Linux (WSL)

适用于 Linux 的 Windows 子系统(Windows Subsystem for Linux, WSL)可以让开发者在 GNU/Linux 环境下运行项目,而免去双系统、虚拟机等设置。在 WSL 下,你可以选择自己想要的 GNU/Linux 版本,然后借助 vim、emacs 等工具运行 Javascript​、Python​、C​/C++​、Rust​、Go 等不同的编程语言。WSL 也可以让用户类 Unix 命令行下启用 Windows 应用,同时在 Windows 系统下启动 GNU/Linux 应用。


什么是 GNU?

GNU 是一个自由的操作系统,其内容软件完全以 GPL 方式发布。这个操作系统是 GNU 计划的主要目标,名称来自 GNU's Not Unix! 的递归缩写,因为 GNU 的设计类似 Unix,但它不包含具著作权的 Unix 代码。—— 来源维基百科

WSL 的安装方式可以直接查看微软的官方安装文档:安装 WSL | Microsoft Docs


安装

  1. 安装好 WSL 后,安装Visual Studio Code​ 并在应用商店下载C/C++ 插件。
  2. 运行 WSL 并输入以下命令,安装 C 语言编译器。如果需要安装 C++ 编译器或调试工具,还可以将​​gcc​​​ 替换为​​g++​​​(C++ 编译器)或​​gdb​​(调试器)。
sudo apt-get update
sudo apt install gcc
sudo apt-get install build-essential gdb


创建项目文件

在 WSL 中创建项目文件夹 ​​projects​​​,然后再创建子文件夹 ​​helloworld​​​。除此之外,我们还需要再 Windows 下创建一个名为 ​​helloworld​​ 的文件夹。

mkdir projects
cd projects
mkdir helloworld


配置 VS Code

在 VS Code 中,同时按下 ​​Ctrl+Shift+P​​​ 后输入 ​​C/C++​​​,并选择 ​​Edit Configurations (UI)​​​。之后,我们需要把 ​​Compiler path​​​ 改为 ​​/usr/bin/gcc​​​ 并把 ​​IntelliSense mode​​​ 改为 ​​gcc-x64​​。

{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}

在 VS Code 转入 ​​View > Command Palette > Configure Default Build Task > Create tasks.json file from template > Others​​​,在弹出的 ​​tasks.json​​​ 中粘贴下面的内容并把 ​​<linux user name>​​ 替换为自己的 Linux 用户名。

{
"version": "2.0.0",
"windows": {
"options": {
"shell": {
"executable": "bash.exe",
"args": ["-c"]
}
}
},
"tasks": [
{
"label": "build on WSL",
"type": "shell",
"command": "g++",
"args": [
"-g",
"-o",
"/home/<linux user name>/projects/helloworld/helloworld.out",
"'${relativeFileDirname}/${fileBasename}'"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$gcc"
]
},
{
"label": "run on WSL",
"type": "shell",
"command": "/home/<linux user name>/projects/helloworld/helloworld.out",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$gcc"
]
}
]
}

Build on WSL 会编译项目并导出可执行的 ​​helloworld.out​​​ 文件,而 ​​run on WSL​​ 则会运行已导出的可执行文件。

若要进行调试,大家可以在 json 中创建 ​​launch.json​​​ 文件,然后复制粘贴下方的代码并替换 ​​<linux username>​​​ 及 ​​<windows username>​​ 。

{
"version": "0.2.0",
"configurations": [

{
"name": "(gdb) Launch",
"preLaunchTask": "build on WSL",
"type": "cppdbg",
"request": "launch",
"program": "/home/<linux username>/projects/helloworld/helloworld.out",
"args": [""],
"stopAtEntry": true,
"cwd": "/home/<linux username>/projects/helloworld/",
"environment": [],
"externalConsole": true,
"windows": {
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
"pipeTransport": {
"pipeCwd": "",
"pipeProgram": "c:\\windows\\sysnative\\bash.exe",
"pipeArgs": ["-c"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/mnt/c": "${env:systemdrive}/",
"/usr": "C:\\Users\\<windows username>\\AppData\\Local\\Packages\\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\\LocalState\\rootfs\\usr\\"
}
}
]
}


添加源代码

在之前先建好的 ​​helloworld​​​ 中先创建 ​​helloworld.cpp​​​ 或 ​​helloworld.c​​ 文件,然后随意编写一个简单的代码并保存:

#include<stdio.h>
int main()
{
printf("Hello world");
return 0;
}


构建并运行项目

使用 WSL 中安装的 gcc 并按下 ​​Ctrl-Shift-B > build on WSL​​​ 构建项目,然后再通过 ​​Ctrl-Shift-B > run on WSL​​​ 运行 ​​/home/<linux username>/projects/helloworld/helloworld.out​​ 就完成了。

> Executing task: /home/<linux username>/projects/helloworld/helloworld.out <

Hello world
Terminal will be reused by tasks, press any key to close it.