课程地址: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
完毕后重启。
重启后看到界面:
等待一段时间后,可以设置 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
心得:
基本上就按着官方的教程配置就好了,官方文档写的非常清楚。
插件:C/C++ Project Generator
给大家推荐一个插件,C/C++ Project Generator,这个插件直接给你把工程文件和Cmake文件建立好了,task.json和launch.json也对应好了,有特殊需求可以直接在里面改,很方便,建议大家试试;也可以按照up的一步步来,方便理解运行
设计内容:
Linux中一切皆文件,比如文件夹也是文件。
Linux的指令是指在Linux终端(命令行)中输入的内容。
(课件中的所有中括号的内容意味着可以省略)
Linux中指令是有自动补全的:TAB键位。比如我输入一个mk然后按tab:
作用:列出当前工作目录下的所有文件/文件夹的名称
用法:
用法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中隐藏文档一般都是以“.”开头
作用:切换当前的工作目录
用法1:cd ; cd ~
# 以下两条命令等价,示直接进入当前用户的家目录下【很常用】
cd
cd ~
用法2:cd [相对路径]
# 进入到上级目录下
cd ..
# 进入到上级目录中的local目录下
cd ../local
用法3:cd [绝对路径]
# 进入到/usr/local目录下
cd /usr/local
Linux中波浪线代表的就是家目录的意思。
作用:创建目录
用法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
作用:创建新文件
【为什么创建新文件是touch】
- touch的作用本来不是创建文件,而是将指定文件的修改时间设置为当前时间。就是假 装“碰”(touch)了一下这个文件,假装文件被“修改”了,于是文件的修改时间就是被设置为当前时间。
- 这带来了一个副作用,就是当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
作用:删除文件/目录
用法1:rm [选项] 需要移除的文件路径
# 删除当前路径下的myfile文件
rm myfile
# 删除/usr路径下的myfile文件
rm /usr/myfile
用法2:rm [选项] 需要移除的目录
# 删除当前路径下的abc文件
rm -rf myfolder
# 删除/usr路径下的abc文件
rm -rf /usr/myfolder
作用:复制文件/文件夹到指定的位置
用法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 [需要移动的文件路径] [需要保存的位置路径]
# 移动当前目录下myfile文件到根目录/下
mv myfile /myfile
# 移动当前目录下myfolder文件夹到根目录/下
mv myfolder /myfolder
# 移动当前目录下myfile到根目录/下,并重命名为myfile007
mv myfile myfile007
作用:包含了Linux中全部命令手册
用法:man [命令]
含义:查看命令使用手册,按 q 退出
# 查看ls命令的手册
man ls
# 查看cd命令的手册
help cd # man没有cd,要用help去看
# 查看man命令的手册
man man
作用:重启linux系统
用法:reboot
# 立即重启
reboot
作用:关机
用法:shut -h [时间]
# 立即关机
shutdown -h now
sudo apt install tree
比如用ls看到当前目录有文件夹Logs,就可以使用命令:
tree Logs/
在Linux中安装任意一个软件之前,最好先执行一下:sudo apt update
?
参考了:https://zhuanlan.zhihu.com/p/272522594
这一讲我们只需要执行下面两行即可:
sudo apt update
sudo apt install cmake gcc clang gdb build-essential
绿色代表可执行文件,文件名test,执行一个可执行文件,输入 ./ 表示当前路径。所以这里是:./test
-o 指定输出文件名
注:使用 man gcc 命令可以查看gcc英文使用手册
如上图,对比了一下开不开氧气优化的区别,time 加 可执行文件,可以把具体时间量化出来。
(补充:通配符,比如我们经常看到的 * ,可以使用星号代替零个、单个或多个字符。
https://baike.baidu.com/item/%E9%80%9A%E9%85%8D%E7%AC%A6/92991?fr=aladdin)
调试开始:执行gdb [exefilename] ,进入gdb调试程序,其中exefilename为要调试的可执行文件名
以下命令后括号内为命令的简化使用,比如 run(r) ,直接输入命令 r 就代表命令:
Tips:
- 编译程序时需要加上-g,之后才能用gdb进行调试:gcc -g main.c -o main
- 回车键:重复上一命令
4.2 【实战】命令行调试
比较常用的:View->show minimap, Terminal->New Terminal 打开终端,和外面的终端作用一模一样。Terminal->Split Terminal 终端分屏。
https://docs.microsoft.com/zh-cn/windows/wsl/compare-versions
请考虑尝试 VS Code Remote - WSL 扩展,以便使你不仅能够使用 Linux 命令行工具将项目文件存储在 Linux 文件系统上,而且还可以使用 Windows 上的 VS Code 在 Internet 浏览器中创作、编辑、调试或运行项目,而不会造成任何与跨 Linux 和 Windows 文件系统工作相关联的性能下降。 了解详细信息。
VS Code里面按下F1、输入shortcuts、回车,就会自动跳转到这个文档,这个方法可以查看这个文档的实时更新。
https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf
5.4.1 高频使用技巧
Say you use Visual Studio on Windows, Xcode on OSX and Makefile for Linux:
沒有用跨平台的编译工具(小插曲:Win10,繁体简体切换,ctrl + shift + F):
新写一个bar.cpp,需要对每个平台的构建工具都进行更新,很麻烦。
针对第五章写的两个小项目来写对应的CMakeLists.txt
之前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
program:代表着你要调试的可执行文件的路径。
两者结合,自动化调试:
build有俩任务:cmake … 和 make
launch.json中的preLaunchTask就指定了那个tasks.json的那个任务。
这个json文件只和补全提示 Intellisense 有关,和编译无关。
参考链接:https://stackoverflow.com/questions/53973777/vscode-no-such-file-or-directory-when-running-c-code
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 :源程序中使用了扩展语法的地方将产生相应的警告信息。
Scan for Kits 后可以选择一个 Kit 比如 GCC,想换的时候选 Select a Kit:
在最下面这里会显示当前 Kit: