基于VSCode和CMake实现C/C++开发 | Linux篇
文章目录前言前言课程地址:https://www.bilibili.com/video/BV1fy4y1b7TC微软官方《设置 WSL 开发环境的最佳做法》:https://docs.microsoft.com/zh-cn/windows/wsl/setup/environment以下两个可以参考,但我并没有看:WSL安装教程:https://www.bilibili.com/video/BV1a
文章目录
- 前言
- 环境配置教程
- Windows下的vscode:
- 基于VSCode和CMake实现C/C++开发 | Linux篇
- 第一讲:Linux系统介绍
- 1.1 目录结构
- 1.2 指令与选项
- 1.3 重要指令讲解 +【实战】命令行演练
- pwd - Print current working directory
- ls - List directory contents
- clear 或者 ctrl + l:清屏
- cd - change directory
- mkdir - make directories
- touch - change file timestamps
- rm - remove files or directories
- cp - copy files and directories
- mv - move (rename) files
- man - an interface to the system reference manuals
- reboot - reboot the machine
- shutdown - power-off the machine
- 推荐安装:tree
- 1.4 文件编辑
- 第二讲:开发环境搭建
- 第三讲:GCC编译器
- 第四讲:GDB调试器
- 第五讲:VSCode
- 第六讲:CMake
- 第七讲:实战:使用VSCode进行完整项目开发
- 补充
前言
课程地址: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 终端预览下拉菜单中的命令面板按钮打开它。
心得:
基本上就按着官方的教程配置就好了,官方文档写的非常清楚。
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】
- 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
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++重要编译参数
-
-g 编译带调试信息的可执行文件
-
-O[n] 优化源代码
-
-l 和 -L 指定库文件 | 指定库文件路径
-
-I 指定头文件搜索目录
-
-Wall 打印警告信息
-
-w 关闭警告信息
-
-std=c++11 设置编译标准
-
-o 指定输出文件名
-
-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:
- 编译程序时需要加上-g,之后才能用gdb进行调试:gcc -g main.c -o main
- 回车键:重复上一命令
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:
更多推荐
所有评论(0)