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

文章目录

  • 前言
  • 环境配置教程
  • 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编译器
      • 3.1 编译过程
      • 3.2 g++重要编译参数
    • 第四讲:GDB调试器
      • 常用调试命令参数
    • 第五讲:VSCode
      • 5.1 界面介绍
      • 5.2 插件安装
      • 5.3 快捷键
        • ↓ 代码编辑相关的快捷键 ↓
      • 5.4【实战】2个小项目
    • 第六讲:CMake
      • 6.1 Cross-platform development
      • 6.2 语法特性介绍
      • 6.3 重要指令和CMake常用变量
        • 6.3.1 重要指令
        • 6.3.2 CMake常用变量
      • 6.4 CMake编译工程
        • 6.4.1 编译流程
        • 6.4.2 两种构建方式
      • 6.5 【实战】CMake代码实践
        • 6.5.1 最小CMake工程
        • 6.5.2 多目录工程 - 直接编译
        • 6.5.3 多目录工程 - 生成库编译
    • 第七讲:实战:使用VSCode进行完整项目开发
      • launch.json:
      • tasks.json:
      • c_cpp_properties.json
  • 补充
    • G++ 编译参数
    • VSCODE CMAKE 查找Kit

前言

课程地址: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

环境配置教程

基于VSCode和CMake实现C/C++开发 | Linux篇_第1张图片
输入指令:wsl --install

完毕后重启。

重启后看到界面:
基于VSCode和CMake实现C/C++开发 | Linux篇_第2张图片
等待一段时间后,可以设置 Linux 用户信息。(详见官方文档,若忘记密码也有讲怎么操作)

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

。。。。。。

安装并开始设置 Windows 终端:

微软商店一直打不开。

最后我是:
基于VSCode和CMake实现C/C++开发 | Linux篇_第3张图片
然后重启了一下就好了。

终端界面:
基于VSCode和CMake实现C/C++开发 | Linux篇_第4张图片
可以通过命令面板调用 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 目录结构

基于VSCode和CMake实现C/C++开发 | Linux篇_第5张图片

1.2 指令与选项

Linux的指令是指在Linux终端(命令行)中输入的内容。
基于VSCode和CMake实现C/C++开发 | Linux篇_第6张图片
(课件中的所有中括号的内容意味着可以省略)

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

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

pwd - Print current working directory

作用:打印当前终端所在的目录
基于VSCode和CMake实现C/C++开发 | Linux篇_第7张图片

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 文件编辑

基于VSCode和CMake实现C/C++开发 | Linux篇_第8张图片

基于VSCode和CMake实现C/C++开发 | Linux篇_第9张图片

第二讲:开发环境搭建

基于VSCode和CMake实现C/C++开发 | Linux篇_第10张图片
在Linux中安装任意一个软件之前,最好先执行一下:sudo apt update

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

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

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

第三讲:GCC编译器

基于VSCode和CMake实现C/C++开发 | Linux篇_第11张图片

3.1 编译过程

基于VSCode和CMake实现C/C++开发 | Linux篇_第12张图片
基于VSCode和CMake实现C/C++开发 | Linux篇_第13张图片
绿色代表可执行文件,文件名test,执行一个可执行文件,输入 ./ 表示当前路径。所以这里是:./test

3.2 g++重要编译参数

  1. -g 编译带调试信息的可执行文件
    基于VSCode和CMake实现C/C++开发 | Linux篇_第14张图片

  2. -O[n] 优化源代码
    基于VSCode和CMake实现C/C++开发 | Linux篇_第15张图片

  3. -l 和 -L 指定库文件 | 指定库文件路径
    基于VSCode和CMake实现C/C++开发 | Linux篇_第16张图片

  4. -I 指定头文件搜索目录
    基于VSCode和CMake实现C/C++开发 | Linux篇_第17张图片

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

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

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

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

  9. -D 定义宏
    基于VSCode和CMake实现C/C++开发 | Linux篇_第18张图片
    (上图是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 生成库文件并编译
基于VSCode和CMake实现C/C++开发 | Linux篇_第19张图片
基于VSCode和CMake实现C/C++开发 | Linux篇_第20张图片

基于VSCode和CMake实现C/C++开发 | Linux篇_第21张图片
注:Linux动态库扩展名 .so ,静态库扩展名 .a

第四讲:GDB调试器

基于VSCode和CMake实现C/C++开发 | Linux篇_第22张图片

常用调试命令参数

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

以下命令后括号内为命令的简化使用,比如 run(r) ,直接输入命令 r 就代表命令:
基于VSCode和CMake实现C/C++开发 | Linux篇_第23张图片
基于VSCode和CMake实现C/C++开发 | Linux篇_第24张图片

Tips:

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

4.2 【实战】命令行调试

第五讲:VSCode

5.1 界面介绍

基于VSCode和CMake实现C/C++开发 | Linux篇_第25张图片
比较常用的:View->show minimap, Terminal->New Terminal 打开终端,和外面的终端作用一模一样。Terminal->Split Terminal 终端分屏。

换行:
基于VSCode和CMake实现C/C++开发 | Linux篇_第26张图片

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

基于VSCode和CMake实现C/C++开发 | Linux篇_第27张图片
高频:
基于VSCode和CMake实现C/C++开发 | Linux篇_第28张图片
基于VSCode和CMake实现C/C++开发 | Linux篇_第29张图片

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

基于VSCode和CMake实现C/C++开发 | Linux篇_第30张图片
基于VSCode和CMake实现C/C++开发 | Linux篇_第31张图片
在这里插入图片描述
基于VSCode和CMake实现C/C++开发 | Linux篇_第32张图片
代码格式化还能用鼠标右键的形式:基于VSCode和CMake实现C/C++开发 | Linux篇_第33张图片

5.4【实战】2个小项目

5.4.1 高频使用技巧

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

分屏:
基于VSCode和CMake实现C/C++开发 | Linux篇_第34张图片

第六讲:CMake

在这里插入图片描述

6.1 Cross-platform development

Say you use Visual Studio on Windows, Xcode on OSX and Makefile for Linux:
基于VSCode和CMake实现C/C++开发 | Linux篇_第35张图片
沒有用跨平台的编译工具(小插曲:Win10,繁体简体切换,ctrl + shift + F):
基于VSCode和CMake实现C/C++开发 | Linux篇_第36张图片
新写一个bar.cpp,需要对每个平台的构建工具都进行更新,很麻烦。

而cmake的流程:
基于VSCode和CMake实现C/C++开发 | Linux篇_第37张图片

6.2 语法特性介绍

基于VSCode和CMake实现C/C++开发 | Linux篇_第38张图片

6.3 重要指令和CMake常用变量

6.3.1 重要指令

基于VSCode和CMake实现C/C++开发 | Linux篇_第39张图片
基于VSCode和CMake实现C/C++开发 | Linux篇_第40张图片
基于VSCode和CMake实现C/C++开发 | Linux篇_第41张图片
基于VSCode和CMake实现C/C++开发 | Linux篇_第42张图片
基于VSCode和CMake实现C/C++开发 | Linux篇_第43张图片

6.3.2 CMake常用变量

基于VSCode和CMake实现C/C++开发 | Linux篇_第44张图片

基于VSCode和CMake实现C/C++开发 | Linux篇_第45张图片

6.4 CMake编译工程

基于VSCode和CMake实现C/C++开发 | Linux篇_第46张图片

6.4.1 编译流程

基于VSCode和CMake实现C/C++开发 | Linux篇_第47张图片

6.4.2 两种构建方式

基于VSCode和CMake实现C/C++开发 | Linux篇_第48张图片
基于VSCode和CMake实现C/C++开发 | Linux篇_第49张图片

6.5 【实战】CMake代码实践

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

6.5.1 最小CMake工程

基于VSCode和CMake实现C/C++开发 | Linux篇_第50张图片

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和CMake实现C/C++开发 | Linux篇_第51张图片

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

launch.json:

基于VSCode和CMake实现C/C++开发 | Linux篇_第52张图片
基于VSCode和CMake实现C/C++开发 | Linux篇_第53张图片
基于VSCode和CMake实现C/C++开发 | Linux篇_第54张图片


program:代表着你要调试的可执行文件的路径。

preLaunchTask:在调试之前要做一个task
基于VSCode和CMake实现C/C++开发 | Linux篇_第55张图片

tasks.json:

基于VSCode和CMake实现C/C++开发 | Linux篇_第56张图片
在这里插入图片描述

两者结合,自动化调试:


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:
基于VSCode和CMake实现C/C++开发 | Linux篇_第57张图片
在最下面这里会显示当前 Kit:
在这里插入图片描述

你可能感兴趣的:(C++,linux,vscode,c++)