记录第一次搭建环境过程。

如何选择开发环境

搭建C/C++开发环境有很多种方式,如

MinGW + vscode(MinGW 是GCC的Windows版本,本地编译环境)SSH隧道连接 + vscode(远程Linux主机)wsl + vscode(远程Linux环境)CLion(Jetbrains开发的C/C++ IDE,没错就是开发idea、Pycharm的那个捷克公司。自带MinGW环境)visual studio(微软开发的C/C++ IDE)

选择 wsl + vscode 其实非常不适合小白折腾,但是考虑到国内的研发环境(内网)与习惯(总喜欢白嫖),那开源方案肯定是首选了,所以1、2、3方案其实是最适合的(毕竟4、5要收费嘛,老板怎么可能舍得出钱藍)。由于这里是自己学习,以及为了更愉快方便的学习Linux,选择了 wsl + vscode, 其实也可以选择SSH隧道连接 + vscode(远程Linux主机),但装个虚拟机,或者买个服务器多不划算藍,故直接梭哈 wsl + vscode。这样更能够无缝迁移并适配国内企业的真实研发环境。

关于编译器的选择

C/C++的编译器目前有两个主流的软件:GCC 和 clang。有很多人说 clang 好,有很多人说 GCC 好,也有人说二者各有千秋。那么在实际开发环境中该如何选择呢?

GCC vs Clang 该如何选择?GCC vs Clang 有何区别

个人认为喜欢哪个用哪个,我这边用的是GCC。

安装 wsl1

两种安装方式,一种简单(会默认安装到C盘),一种灵活。

快捷安装

windows 打开如下设置 打开 Microsoft Store(微软商城),搜索 Ubuntu,找到 Ubuntu 20.04 LTS,点击获取等待下载完成下载完成后,设置用户名或密码,设置完后,安装Ubuntu系统完成

自定义安装

上面的安装方式会默认安装到C盘,若不想安装到C盘可以通过以下方式安装。 https://learn.microsoft.com/zh-cn/windows/wsl/install-manual

安装gcc

进入windows命令行,键入wsl,进入Linux shell。执行如下命令,把原来的apt源重命名为sources.list.bak,将阿里云的源作为apt默认使用的源

mv -f /etc/apt/sources.list /etc/apt/sources.list.bak

cat > /etc/apt/sources.list<< EOF

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

EOF

然后 sudo apt-get update ,更新apt 镜像信息。再然后 sudo apt-get install build-essential ,一键安装 包括 gcc, g++, 和make。再安装手册页(关于如何使用 GNU/Linux 进行开发) sudo apt-get install manpages-dev。验证 GCC 编译器的安装是否成功,使用gcc --version命令。打印 GCC 版本。

gcc (Ubuntu 9.4.0-1ubuntu1~20.04.3) 9.4.0

Copyright (C) 2019 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

安装gdb sudo apt-get install gdb。

在vscode上搭建远程开发环境

首先就是下载宇宙最强编辑器 vscode。 然后安装各种插件,首当其冲就是wsl,安装好之后在左侧导航栏有个远程连接图标,点击它就能连接到ubuntu环境了。

这里默认是在外网情况下,如果你在内网,可能会下载vscode-server失败 ,在网络无问题时,这个东西下载解压后会自动放到 .vscode-server/bin/{commitid}(vscode的commitid)目录下,否则你要手动下载:https://update.code.visualstudio.com/commit:{commit_id}/server-linux-x64/stable(注意把:${commit_id}替换成对应的Commit ID。 然后根据提示更改相应文件的执行权限,直至成功即可。

.vscode-server的目录在C:\Users{用户名}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc\LocalState\rootfs\home{用户名}下

安装cmake、c/c++、git 等相关插件

这玩意待后续记录,研究下哪种方式编译运行调试更好些

如何构建一个模块级项目

一个很基本的项目结构如下 src 存放源码,include 定义要用到的头文件

.CProject

├── .vscode

│ ├── c_cpp_properties.json # C/C++插件(UI)配置的json文件,暂时不知道有什么用

│ ├── launch.json # 用来配置gdb,也就是调试时的配置

│ └── tasks.json # 用来配置gcc,也就是编译时的配置

├── include

│ ├── api.h

│ └── type.h

└── src

└── main.c

launch.json 的配置

{

// Use IntelliSense to learn about possible attributes.

// Hover to view descriptions of existing attributes.

// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387

"version": "0.2.0",

"configurations": [

{

"name": "gcc - Build and debug active file",

"type": "cppdbg",

"request": "launch",

"program": "${fileDirname}/${fileBasenameNoExtension}",

"args": [],

"stopAtEntry": false,

"cwd": "${fileDirname}",

"environment": [],

"externalConsole": false,

"MIMode": "gdb",

"setupCommands": [

{

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

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

"ignoreFailures": true

}

],

"preLaunchTask": "C/C++: gcc build active file",

"miDebuggerPath": "/usr/bin/gdb"

}

]

}

tasks.json 的配置

{

"tasks": [

{

"type": "cppbuild",

"label": "C/C++: gcc build active file",

"command": "/usr/bin/gcc",

"args": [

"-g", // 使用-g选项编译,会包含完整的调试信息,包括变量名、函数名、行号等

// "${file}",

"${workspaceFolder}/*.c", // 编译工作目录下所有.c文件

"-I",

"${workspaceFolder}/include", // -I选项,跟上一个路径,该路径告诉编译器在哪里搜索头文件

"-o", // 用于指定生成的可执行文件的名称

"${fileDirname}/${fileBasenameNoExtension}"

],

"options": {

"cwd": "${fileDirname}"

},

"problemMatcher": [

"$gcc"

],

"group": {

"kind": "build",

"isDefault": true

},

// 运行或调试文件时,系统会启动两个终端,一个是用于显示编译任务,另一个是

//用于执行调试命令并显示程序运行结果。但是很多时候前一个终端没有显示的必要,

//可以将其设置为只在编译失败时显示,如下,reveal = silent:

"presentation": {

"echo": true,

"reveal": "silent",

"focus": false,

"panel": "shared",

"showReuseMessage": true,

"clear": false

},

"detail": "Task generated by Debugger."

}

],

"version": "2.0.0"

}

如何对项目进行编译、运行、debug

单文件编译运行调试

运行快捷键:ctrl + f5 debug 快捷键: f5

多文件编译运行调试

1.cmake 生成 makefiles 2.make 编译 3.调试

FAQ & 感谢 & 参考

如何在 Ubuntu 20.04/22.04 上安装 GCC 编译器? ubuntu20.04 apt 安装报 E: Unable to correct problems, you have held broken packages. gcc 所有releases版本 win10如何开启wsl系统? 无法写入文件"vscode-remote://wsl+ubuntu-怎么办? 编译运行时终端老打印[1] + Done “/usr/bin/gdb“ --interpreter=时怎么办?

在launch.json中 configurations 配置中加入这一行 “miDebuggerArgs”: “-q -ex quit; wait() { fg >/dev/null; }; /usr/bin/gdb -q --interpreter=mi”,

vscode配置参考

参考文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。