前言

课程地址:https://www.bilibili.com/video/BV1fy4y1b7TC
微软官方《设置 WSL 开发环境的最佳做法》:
https://docs.microsoft.com/zh-cn/windows/wsl/setup/environment

以下这几个可以参考,但我并没有看:
WSL安装教程:https://www.bilibili.com/video/BV1aA411s7PJ
WSL官方文档:https://docs.microsoft.com/zh-cn/windows/wsl/install
Visual Studio 中的 CMake 项目:
https://docs.microsoft.com/zh-cn/cpp/build/cmake-projects-in-visual-studio?view=msvc-170

Linux常用命令:
https://blog.csdn.net/qq_23329167/article/details/83856430?spm=1001.2014.3001.5506

环境配置教程

在这里插入图片描述
输入指令:wsl --install

完毕后重启。

重启后看到界面:
在这里插入图片描述
等待一段时间后,可以设置 Linux 用户信息。(详见官方文档,若忘记密码也有讲怎么操作)

设置好账号密码后,运行指令:sudo apt update && sudo apt upgrade(建议使用发行版的首选包管理器定期更新和升级包。 对于 Ubuntu 或 Debian,请使用此命令)

。。。。。。

安装并开始设置 Windows 终端:

微软商店一直打不开。

最后我是:
在这里插入图片描述
然后重启了一下就好了。

终端界面:
在这里插入图片描述
可以通过命令面板调用 Windows 终端的大多数功能。 调用它的默认键组合是 Ctrl+Shift+P。 你还可以使用 Windows 终端预览下拉菜单中的命令面板按钮打开它。

跨文件系统:
https://docs.microsoft.com/zh-cn/windows/wsl/filesystems#file-storage-and-performance-across-file-systems

心得:
基本上就按着官方的教程配置就好了,官方文档写的非常清楚。

Windows下的vscode:

插件:C/C++ Project Generator

给大家推荐一个插件,C/C++ Project Generator,这个插件直接给你把工程文件和Cmake文件建立好了,task.json和launch.json也对应好了,有特殊需求可以直接在里面改,很方便,建议大家试试;也可以按照up的一步步来,方便理解运行

基于VSCode和CMake实现C/C++开发 | Linux篇

设计内容:
在这里插入图片描述

第一讲:Linux系统介绍


Linux中一切皆文件,比如文件夹也是文件。

1.1 目录结构

在这里插入图片描述

1.2 指令与选项

Linux的指令是指在Linux终端(命令行)中输入的内容。
在这里插入图片描述
(课件中的所有中括号的内容意味着可以省略)

Linux中指令是有自动补全的:TAB键位。比如我输入一个mk然后按tab:
在这里插入图片描述

1.3 重要指令讲解 +【实战】命令行演练

pwd - Print current working directory

作用:打印当前终端所在的目录
在这里插入图片描述

ls - List directory contents

作用:列出当前工作目录下的所有文件/文件夹的名称
用法:

用法1:ls
ls 

用法2:ls [路径]
# ls 相对路径
ls ./ #【表示当前目录下】
ls ../ #【上一级目录下】
# ls 绝对路径
ls /home # 绝对路径一定要以 斜杠 开头,代表根目录

用法3:ls [选项] [路径]
# ls 选项 路径
ls -lah /home
# 选项解释:
 -l:表示list,表示以详细列表的形式进行展示
 -a:表示显示所有的文件/文件夹(包含了隐藏文件/文件夹)
 -h:表示以可读性较高的形式显示
# ls -l 中 “-”表示改行对应的文档类型为文件,“d”表示文档类型为文件夹。
# 在Linux中隐藏文档一般都是以“.”开头

ls -l 中 “-”表示改行对应的文档类型为文件,“d”表示文档类型为文件夹。

在Linux中隐藏文档一般都是以“.”开头

clear 或者 ctrl + l:清屏
cd - change directory

作用:切换当前的工作目录

用法1:cd ; cd ~
# 以下两条命令等价,示直接进入当前用户的家目录下【很常用】
cd
cd ~

用法2:cd [相对路径]
# 进入到上级目录下
cd ..
# 进入到上级目录中的local目录下
cd ../local

用法3:cd [绝对路径]
# 进入到/usr/local目录下
cd /usr/local

Linux中波浪线代表的就是家目录的意思。

mkdir - make directories

作用:创建目录

用法1:mkdir 路径
# 在当前路径下创建出目录“myfolder”
mkdir myfolder

用法2:mkdir -p 路径
含义:一次性创建多层不存在的目录
# 创建 ~/a/b/c 目录
mkdir -p ~/a/b/c

用法3:mkdir 路径1 [路径2] [路径3]
含义:一次性创建多个目录
# 在当前目录分别创建a、b、c三个文件夹
mkdir a b c

如果不用 -p 创建多层不存在的目录则会报错:
在这里插入图片描述

touch - change file timestamps

作用:创建新文件

【为什么创建新文件是touch】

  1. touch的作用本来不是创建文件,而是将指定文件的修改时间设置为当前时间。就是假 装“碰”(touch)了一下这个文件,假装文件被“修改”了,于是文件的修改时间就是被设置为当前时间。
  2. 这带来了一个副作用,就是当touch一个不存在的文件的时候,它会创建这个文件。然后, 由于touch已经可以完成创建文件的功能了,就不再需要一个单独的create了。
用法1:touch [路径]
# 在当前目录下创建linux.txt文件
touch linux.txt
# 在上级目录下创建linux文件
touch ../linux
# 在/home/bing/目录下创建myfile文件
touch /home/bing/myfile

用法2:touch [路径1] [路径2]
# 在当前目录下创建file file.txt 两个文件
touch file file.txt
rm - remove files or directories

作用:删除文件/目录

用法1:rm [选项] 需要移除的文件路径
# 删除当前路径下的myfile文件
rm myfile 
# 删除/usr路径下的myfile文件
rm /usr/myfile

用法2:rm [选项] 需要移除的目录
# 删除当前路径下的abc文件
rm -rf myfolder
# 删除/usr路径下的abc文件
rm -rf /usr/myfolder
cp - copy files and directories

作用:复制文件/文件夹到指定的位置

用法1:cp [被复制的文件路径] [文件被复制到的路径]
# cp命令来复制一个文件
cp /home/bing/myfile ./

用法2:cp -r [被复制的文件夹路径] [文件夹被复制到的路径]
含义:-r 表示递归复制,复制文件夹的时候需要加 -r
# 复制/home/bing/myfolder文件夹到根目录/下
cp -r /home/bing/myfolder /

r 代表 recursion(递归),而之前讲 rm 命令中的 -rf 其实是 -r -f (感觉涉及到文件夹操作的都要 -r 才行?)

mv - move (rename) files

作用:移动文件到新的位置,或者重命名文件
用法:mv [需要移动的文件路径] [需要保存的位置路径]

# 移动当前目录下myfile文件到根目录/下
mv myfile /myfile
# 移动当前目录下myfolder文件夹到根目录/下
mv myfolder /myfolder
# 移动当前目录下myfile到根目录/下,并重命名为myfile007
mv myfile myfile007
man - an interface to the system reference manuals

作用:包含了Linux中全部命令手册
用法:man [命令]
含义:查看命令使用手册,按 q 退出

# 查看ls命令的手册
man ls
# 查看cd命令的手册
help cd # man没有cd,要用help去看
# 查看man命令的手册
man man
reboot - reboot the machine

作用:重启linux系统
用法:reboot

# 立即重启
reboot
shutdown - power-off the machine

作用:关机
用法:shut -h [时间]

# 立即关机
shutdown -h now
推荐安装:tree

sudo apt install tree
比如用ls看到当前目录有文件夹Logs,就可以使用命令:

tree Logs/

1.4 文件编辑

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二讲:开发环境搭建

在这里插入图片描述
在Linux中安装任意一个软件之前,最好先执行一下:sudo apt update

参考了:https://zhuanlan.zhihu.com/p/272522594

这一讲我们只需要执行下面两行即可:

sudo apt update
sudo apt install cmake gcc clang gdb build-essential

第三讲:GCC编译器

在这里插入图片描述

3.1 编译过程

在这里插入图片描述
在这里插入图片描述
绿色代表可执行文件,文件名test,执行一个可执行文件,输入 ./ 表示当前路径。所以这里是:./test

3.2 g++重要编译参数

  1. -g 编译带调试信息的可执行文件
    在这里插入图片描述

  2. -O[n] 优化源代码
    在这里插入图片描述

  3. -l 和 -L 指定库文件 | 指定库文件路径
    在这里插入图片描述

  4. -I 指定头文件搜索目录
    在这里插入图片描述

  5. -Wall 打印警告信息
    在这里插入图片描述

  6. -w 关闭警告信息
    在这里插入图片描述

  7. -std=c++11 设置编译标准
    在这里插入图片描述

  8. -o 指定输出文件名
    在这里插入图片描述

  9. -D 定义宏
    在这里插入图片描述
    (上图是cpp文件,应该用g++,错写成gcc了)

注:使用 man gcc 命令可以查看gcc英文使用手册

在这里插入图片描述
如上图,对比了一下开不开氧气优化的区别,time 加 可执行文件,可以把具体时间量化出来。

(补充:通配符,比如我们经常看到的 * ,可以使用星号代替零个、单个或多个字符。
https://baike.baidu.com/item/%E9%80%9A%E9%85%8D%E7%AC%A6/92991?fr=aladdin

3.3.2 生成库文件并编译
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
注:Linux动态库扩展名 .so ,静态库扩展名 .a

第四讲:GDB调试器

在这里插入图片描述

常用调试命令参数

调试开始:执行gdb [exefilename] ,进入gdb调试程序,其中exefilename为要调试的可执行文件名

以下命令后括号内为命令的简化使用,比如 run(r) ,直接输入命令 r 就代表命令:
在这里插入图片描述
在这里插入图片描述

Tips:

  1. 编译程序时需要加上-g,之后才能用gdb进行调试:gcc -g main.c -o main
  2. 回车键:重复上一命令

4.2 【实战】命令行调试

第五讲:VSCode

5.1 界面介绍

在这里插入图片描述
比较常用的:View->show minimap, Terminal->New Terminal 打开终端,和外面的终端作用一模一样。Terminal->Split Terminal 终端分屏。

换行:
在这里插入图片描述

5.2 插件安装

https://docs.microsoft.com/zh-cn/windows/wsl/compare-versions

请考虑尝试 VS Code Remote - WSL 扩展,以便使你不仅能够使用 Linux 命令行工具将项目文件存储在 Linux 文件系统上,而且还可以使用 Windows 上的 VS Code 在 Internet 浏览器中创作、编辑、调试或运行项目,而不会造成任何与跨 Linux 和 Windows 文件系统工作相关联的性能下降。 了解详细信息。

5.3 快捷键

VS Code里面按下F1、输入shortcuts、回车,就会自动跳转到这个文档,这个方法可以查看这个文档的实时更新。

https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf

在这里插入图片描述
高频:
在这里插入图片描述
在这里插入图片描述

↓ 代码编辑相关的快捷键 ↓

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码格式化还能用鼠标右键的形式:在这里插入图片描述

5.4【实战】2个小项目

5.4.1 高频使用技巧

  • 左右分屏
  • 固定打开的文件
  • 格式化代码
  • Rename Symbol
  • 显示minimap
  • 侧边栏查看OUTLINE
  • 全屏
  • 关闭多个打开的文件

分屏:
在这里插入图片描述

第六讲:CMake

在这里插入图片描述

6.1 Cross-platform development

Say you use Visual Studio on Windows, Xcode on OSX and Makefile for Linux:
在这里插入图片描述
沒有用跨平台的编译工具(小插曲:Win10,繁体简体切换,ctrl + shift + F):
在这里插入图片描述
新写一个bar.cpp,需要对每个平台的构建工具都进行更新,很麻烦。

而cmake的流程:
在这里插入图片描述

6.2 语法特性介绍

在这里插入图片描述

6.3 重要指令和CMake常用变量

6.3.1 重要指令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.3.2 CMake常用变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.4 CMake编译工程

在这里插入图片描述

6.4.1 编译流程

在这里插入图片描述

6.4.2 两种构建方式

在这里插入图片描述
在这里插入图片描述

6.5 【实战】CMake代码实践

针对第五章写的两个小项目来写对应的CMakeLists.txt

6.5.1 最小CMake工程

在这里插入图片描述

6.5.2 多目录工程 - 直接编译

之前swap的工程,g++编译的时候:在这里插入图片描述
那么这里用CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)
 
project(SWAP)

include_directories(include)

add_executable(main_cmake main.cpp src/swap.cpp)

终端编译执行:

mkdir build
cd build
cmake ..
make
./main_cmake 
6.5.3 多目录工程 - 生成库编译

在这里插入图片描述

第七讲:实战:使用VSCode进行完整项目开发

launch.json:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
program:代表着你要调试的可执行文件的路径。

preLaunchTask:在调试之前要做一个task
在这里插入图片描述

tasks.json:

在这里插入图片描述
在这里插入图片描述

两者结合,自动化调试:
在这里插入图片描述
在这里插入图片描述
build有俩任务:cmake … 和 make

launch.json中的preLaunchTask就指定了那个tasks.json的那个任务。

c_cpp_properties.json

这个json文件只和补全提示 Intellisense 有关,和编译无关。

参考链接:https://stackoverflow.com/questions/53973777/vscode-no-such-file-or-directory-when-running-c-code

补充

G++ 编译参数

1、-pedantic 选项,那么使用了扩展语法的地方将产生相应的警告信息

2、-Wall 使用它能够使GCC产生尽可能多的警告信息

3、-Werror,它要求GCC将所有的警告当成错误进行处理

https://zhuanlan.zhihu.com/p/393419013

应该始终使用 -Wall 和 -Wextra 进行编译,因为它们会启用警告并帮助我们以了解我们的错误,如果有的话。

一般测试:

clang++ -Wall -Wextra -std=c++20 test.cc
./a.out
g++ -Wall -Wextra -Werror -pedantic -std=c++20 test.cc
./a.out

-Werror :貌似直接把warning当作error处理。

-pedantic :源程序中使用了扩展语法的地方将产生相应的警告信息。

VSCODE CMAKE 查找Kit

Scan for Kits 后可以选择一个 Kit 比如 GCC,想换的时候选 Select a Kit:
在这里插入图片描述
在最下面这里会显示当前 Kit:
在这里插入图片描述

Logo

更多推荐