关于
个人学习相关资料整理笔记,持续更新中。。。
docker
-
1. Docker简介
什么是容器?
容器是一种轻量级、可移植、自给自足的软件运行环境,能够封装应用及其所有依赖(如库、配置文件等),确保应用在任何环境中都能一致运行。与虚拟机相比,容器不需要虚拟化硬件,而是利用操作系统的功能来实现隔离。
容器与虚拟机的区别
- 资源隔离方式:虚拟机(VM)通过虚拟化技术隔离整个操作系统,而容器则共享宿主操作系统内核,隔离的是用户空间。
- 性能:由于容器不需要启动完整的操作系统,它们的启动速度更快,资源占用更少。
- 资源使用:容器比虚拟机使用的系统资源更少,适合高密度部署。
Docker的架构和组件
- Docker Daemon:也叫Docker Engine,是容器的核心,负责管理容器的生命周期,包括容器的创建、运行、停止和删除等。
- Docker Client:是与Docker Daemon进行交互的命令行客户端,用户通过Docker命令与其交互。
- Docker Registry:是镜像仓库,存储Docker镜像。Docker Hub是公共的Docker Registry,用户也可以配置私有的镜像仓库。
Docker的优点
- 可移植性:Docker容器能够保证应用在任何环境下都能一致运行,无论是在本地开发环境、测试环境,还是生产环境。
- 资源隔离:容器提供了进程、网络、文件系统的隔离,确保容器内的应用互不干扰。
- 快速部署:容器的启动非常快速,且可以在几秒钟内创建多个实例,实现高效的应用部署和扩展。
2. 安装与配置
在不同操作系统上安装Docker
- Linux:通过包管理工具(如
apt
、yum
)安装,或者直接从Docker官方网站下载并安装。 - macOS:可以通过Docker Desktop进行安装,安装后会自带Docker Daemon和Client。
- Windows:类似macOS,通过Docker Desktop进行安装,也支持Windows容器。
Docker命令行基础
docker run
:创建并启动一个新的容器。docker ps
:列出当前运行中的容器。docker stop
:停止一个正在运行的容器。docker exec
:在容器中执行命令。
Docker配置与镜像下载源
- 配置国内镜像源(如阿里云)可以加速镜像的下载。可以通过修改
/etc/docker/daemon.json
文件来配置镜像源。
3. Docker镜像
什么是镜像,如何使用和构建镜像
Docker镜像是容器的模板,包含了应用和运行所需的所有环境。通过使用
docker build
命令可以根据Dockerfile构建镜像。官方镜像与自定义镜像
- 官方镜像:Docker Hub上由Docker团队和开源社区维护的镜像。
- 自定义镜像:用户根据自己的需求,在Dockerfile中定义构建镜像的步骤和依赖,创建个性化的镜像。
Dockerfile基础
Dockerfile是用于构建镜像的脚本,定义了镜像的构建过程。常见指令包括:
FROM
:指定基础镜像。RUN
:在镜像内执行命令。COPY
:复制文件到镜像中。EXPOSE
:声明容器监听的端口。
镜像的版本控制
Docker镜像使用标签(tag)进行版本控制,常见格式是
image:tag
,如ubuntu:20.04
,其中ubuntu
是镜像名称,20.04
是版本标签。4. Docker容器
容器的创建与管理
docker run
:创建并启动一个新容器。docker start
:启动一个已停止的容器。docker stop
:停止一个正在运行的容器。docker rm
:删除一个停止的容器。
容器与镜像的关系
容器是从镜像创建出来的实例,镜像是容器的静态模板,而容器则是动态的、可运行的。
容器的数据卷与持久化
- Volumes:Docker管理的卷,适用于持久化存储。
- Bind Mounts:将主机的文件系统挂载到容器中,用于在容器中访问主机的文件或目录。
网络管理
- Bridge Network:容器在同一主机上通过虚拟桥接进行通信。
- Host Network:容器共享宿主机的网络栈,适用于对网络性能要求较高的场景。
- Overlay Network:跨多主机的容器网络,适用于Swarm模式下的容器通信。
5. Docker Compose
什么是Docker Compose,如何安装与使用
Docker Compose是一个工具,用于定义和运行多容器Docker应用。通过编写
docker-compose.yml
文件,用户可以一键启动多个服务。编写docker-compose.yml文件
该文件用于定义多个服务的配置,如镜像、容器名称、端口映射等。
使用Docker Compose管理多容器应用
通过
docker-compose up
命令启动所有定义的服务,docker-compose down
停止并移除所有容器。管理不同环境的配置
可以在
docker-compose.yml
文件中使用不同的配置文件来管理开发、测试和生产环境中的不同配置。6. Docker网络与存储
Docker的网络模式
- Bridge:默认的网络模式,适用于容器与容器之间在同一主机上的通信。
- Host:容器共享主机的网络栈,适用于高性能网络需求。
- None:容器不连接任何网络。
- Overlay:跨多个Docker主机进行网络通信,适用于Swarm集群。
- Macvlan:为容器分配独立的网络接口,适用于需要容器直接与外部网络通信的场景。
数据卷与存储
- 持久化存储:使用Volumes进行数据持久化,保证容器停止后数据不丢失。
- 临时存储:在容器生命周期内的数据存储。
使用docker volume管理数据卷
使用
docker volume create
创建卷,docker volume ls
列出卷,docker volume rm
删除卷。7. Docker注册与私有仓库
Docker Hub介绍与使用
Docker Hub是Docker的公共镜像仓库,提供各种官方镜像和社区镜像。
配置私有镜像仓库
可以通过搭建私有Registry服务来管理自己的镜像,配置私有仓库时需要使用认证和授权机制。
推送与拉取镜像操作
docker push
:将镜像上传到远程仓库。docker pull
:从远程仓库拉取镜像。
镜像的安全性与版本管理
确保镜像的安全性,通过扫描镜像、使用官方镜像、定期更新镜像版本来管理镜像的安全和版本控制。
8. Docker的安全性与最佳实践
Docker容器的安全性问题与防护
- 容器逃逸:容器内的进程可能通过漏洞突破隔离,影响宿主机或其他容器。
- 配置错误:容器配置不当可能导致安全漏洞,如过度暴露端口、使用高权限用户运行容器等。
使用非特权用户运行容器
应尽量避免使用root用户运行容器,改为使用非特权用户来减少潜在的安全风险。
镜像的最小化与扫描
- 使用尽量精简的基础镜像,如
alpine
,以减少潜在的漏洞。 - 定期扫描镜像中的安全漏洞,使用工具如Docker Bench for Security或Clair进行安全检查。
docker-compose.yaml示例:
version: '3.8' # 指定docker-compose的版本
services: # 定义服务部分
web: # 服务名称,通常是应用的名称
image: nginx:latest # 使用的Docker镜像,可以是官方镜像或自定义镜像
container_name: my-web-container # 容器名称
ports: # 端口映射,将主机的端口映射到容器的端口
- "8080:80" # 将主机的8080端口映射到容器的80端口
networks: # 定义服务所使用的网络
- web-network # 将此服务连接到web-network网络
volumes: # 挂载卷,将宿主机的目录与容器内的目录同步
- ./html:/usr/share/nginx/html # 将当前目录下的html文件夹挂载到容器的指定目录
db: # 另一个服务,数据库服务
image: mysql:5.7 # 使用MySQL的镜像,指定版本5.7
container_name: my-db-container # 容器名称
environment: # 配置环境变量,传递给容器
MYSQL_ROOT_PASSWORD: example # 设置MySQL的root用户密码
volumes: # 数据卷挂载
- db-data:/var/lib/mysql # 将数据库数据保存在一个独立的卷中,确保数据持久化
networks: # 服务的网络配置
- web-network # 与web服务共享网络
networks: # 定义网络部分
web-network: # 自定义的网络名称
driver: bridge # 使用桥接网络模式
volumes: # 定义数据卷部分
db-data: # 持久化MySQL数据库的数据
k8s
1. Kubernetes概述
什么是Kubernetes,容器编排的必要性
Kubernetes(K8s)是一个开源的容器编排平台,旨在自动化部署、扩展和管理容器化应用。容器编排的必要性体现在:
- 容器化应用管理的复杂性:随着容器的广泛应用,如何高效地管理成千上万个容器成为了一个挑战。Kubernetes解决了容器的生命周期管理、服务发现、负载均衡等问题。
- 高可用性和弹性扩展:容器编排工具(如Kubernetes)提供自动扩容、故障恢复和负载均衡等能力,保证应用在集群中始终可用。
Kubernetes的架构(Master Node, Worker Node)
- Master Node:负责管理集群的状态和控制,处理调度、监控、集群健康检查等工作。它包括以下组件:
- API Server:处理外部请求并进行认证授权。
- Controller Manager:负责控制器管理,确保集群状态符合期望。
- Scheduler:决定将容器调度到哪个Node上。
- etcd:集群的分布式数据库,存储集群的所有配置和状态数据。
- Worker Node:也叫Node,是实际运行容器的节点。每个Node都包含以下组件:
- Kubelet:负责管理Node上的Pod生命周期,确保Pod的容器按预期运行。
- Kube Proxy:负责处理Pod间的网络通信。
- Container Runtime:运行容器的实际运行时(如Docker、containerd等)。
Kubernetes的主要组件:Pod, ReplicaSet, Deployment, Service, Namespace等
- Pod:Kubernetes中最小的部署单元,一个Pod可以包含一个或多个容器,它们共享存储和网络资源。
- ReplicaSet:保证Pod的副本数量与期望一致,提供Pod的高可用性。
- Deployment:用于管理Pod的部署与版本控制,支持自动化的滚动更新和回滚。
- Service:提供稳定的网络地址,暴露Pod的访问入口,支持负载均衡。
- Namespace:用于多租户环境中资源的隔离,每个Namespace可以包含不同的资源,如Pod、Service等。
Kubernetes与Docker的关系
- Docker提供了容器化的解决方案,而Kubernetes负责管理容器的部署、扩展和监控。
- Docker是容器运行时(Container Runtime),而Kubernetes是容器编排工具,两者互相补充。Kubernetes可以使用Docker作为其容器运行时,然而Kubernetes也支持其他容器运行时(如containerd、CRI-O等)。
2. Kubernetes安装与配置
部署Kubernetes集群
- Minikube:适用于开发和学习环境,提供单节点的Kubernetes集群。
- kubeadm:用于在物理或虚拟机上手动部署Kubernetes集群,适合生产环境。
- Kind:在Docker容器中运行Kubernetes集群,适用于本地开发和测试。
- K3s:轻量级的Kubernetes发行版,适用于资源有限的环境。
配置kubectl工具
kubectl
是与Kubernetes集群交互的命令行工具。通过配置~/.kube/config
文件,用户可以指定Kubernetes API Server的位置、认证方式等信息。
使用Kubernetes Dashboard
Kubernetes Dashboard是一个基于Web的UI,允许用户管理和监控Kubernetes集群及其资源。它提供了对Pods、Services、Deployments等资源的图形化管理界面。
常见的安装与配置问题及解决
- kubectl连接问题:确保
kubeconfig
文件配置正确,并且API Server可访问。 - 集群网络问题:检查CNI插件是否正确安装,以及各节点之间的网络连接是否正常。
3. Kubernetes核心概念与资源管理
Pod:Pod的概念,Pod内的容器管理
Pod是Kubernetes中的基本部署单元,它封装了一个或多个容器,容器共享存储、网络和其他资源。Pod内的容器通常是紧密相关的、需要共享资源的。
ReplicaSet:Pod的副本控制
ReplicaSet确保某个Pod的副本数量与期望数量一致。它监控Pod的健康状态,并在Pod失败时自动创建新的副本以维持期望数量。
Deployment:自动化管理应用的部署与扩展
Deployment是一种用于声明式管理Pod和ReplicaSet的Kubernetes资源对象。它支持Pod的滚动更新、回滚操作以及Pod的扩缩容。
Service:暴露Pod的方式
- ClusterIP:默认方式,Service只能在集群内访问。
- NodePort:允许集群外部通过指定端口访问Service。
- LoadBalancer:为Service创建一个外部负载均衡器,适用于云环境。
- Ingress:管理HTTP和HTTPS路由,允许外部流量访问集群内的服务。
Namespace:多租户的资源隔离
Namespace为Kubernetes集群提供逻辑上的分隔,支持资源的多租户隔离。通过Namespace,可以隔离开发、测试、生产环境中的资源。
ConfigMap与Secret:配置管理与敏感信息存储
- ConfigMap:用于存储非敏感的配置信息,Pod可以通过环境变量或挂载文件的方式使用ConfigMap中的数据。
- Secret:用于存储敏感数据(如密码、API密钥等),可以加密存储和传输。
4. Kubernetes工作负载与调度
Deployment:创建、更新和回滚应用
Deployment用于定义应用的期望状态,支持滚动更新和回滚到先前的版本,确保高可用性。
StatefulSet:管理有状态应用
StatefulSet用于管理有状态应用(如数据库),它提供稳定的网络标识、持久化存储和顺序部署能力。
DaemonSet:为每个节点运行一个Pod
DaemonSet确保集群中的每个节点都运行一个Pod,适用于需要在每个节点上运行的服务,如日志收集器和监控代理。
Job和CronJob:批处理和定时任务
- Job:用于运行一次性任务,确保任务成功完成。
- CronJob:用于定期调度任务,类似于Linux中的Cron作业。
Pod调度与资源管理
Pod调度策略决定了Pod在哪个Node上运行,Kubernetes调度器基于资源需求、优先级、约束条件等进行调度。资源请求和限制(CPU、内存)帮助调度器合理分配集群资源。
5. Kubernetes网络与服务发现
Pod通信与网络模型
Kubernetes使用CNI(Container Network Interface)插件为集群中的Pod提供网络功能。Pod内的容器共享网络命名空间,因此它们可以通过localhost相互通信。
服务发现与负载均衡
Kubernetes的Service对象提供了Pod的稳定访问入口,Service通过负载均衡将流量分发到相应的Pod。Ingress控制器提供了更为复杂的HTTP路由功能。
Network Policies:定义Pod间的网络通信策略
Network Policies用于限制Pod间的通信,增强安全性。可以通过定义Ingress和Egress规则来控制哪些Pod或IP地址可以与Pod通信。
DNS与CoreDNS
CoreDNS是Kubernetes集群中的DNS服务器,它支持Service发现功能,可以通过域名访问集群中的Pod和Service。
6. 存储与持久化
Persistent Volume (PV) 与 Persistent Volume Claim (PVC)
- Persistent Volume (PV):集群中的存储资源,由管理员预先创建。
- Persistent Volume Claim (PVC):用户请求存储资源的方式,PVC与PV进行绑定,Pod通过PVC访问存储。
StorageClass:动态存储卷管理
StorageClass定义了存储卷的属性,如存储类型、访问模式等。可以实现动态创建存储卷。
StatefulSet与持久化存储
StatefulSet适用于需要持久化存储的有状态应用,它可以与PVC结合,确保每个Pod都拥有独立且持久的存储。
分布式存储与云存储
Kubernetes支持与各种分布式存储系统(如Ceph、GlusterFS)以及云存储(如EBS、NFS)集成,以满足存储需求。
7. Kubernetes的安全性
RBAC(Role-Based Access Control)
RBAC用于基于角色控制对Kubernetes资源的访问。通过定义Role和RoleBinding,限制用户和服务账户的权限。
Pod安全策略(PSP)
Pod安全策略(PSP)用于定义Pod的安全性要求,例如限制容器使用特权模式、运行用户等。
Kubernetes API的认证与授权
Kubernetes提供多种认证方式(如X.509证书、Bearer Token)和授权机制(如RBAC、ABAC)来保护API Server。
加密与Secret管理
Kubernetes通过加密存储敏感信息,并通过Secret管理存储密钥、密码等数据。Secret可与Pod挂载,也可以作为环境变量使用。
k8s yaml 示例
apiVersion: apps/v1 # 资源类型,指定API版本,这里是apps/v1表示Deployment属于这个版本
kind: Deployment # 资源类型,Deployment是Kubernetes中的一种资源对象
metadata:
name: nginx-deployment # Deployment的名称
labels:
app: nginx # 为Deployment附加一个标签
spec:
replicas: 3 # 指定Pod副本数,Kubernetes会保持3个Nginx实例在集群中运行
selector:
matchLabels:
app: nginx # 用于选择应用的Pod,这里选择所有标签为app: nginx的Pod
template: # Pod的模板,用于创建Pod副本
metadata:
labels:
app: nginx # Pod的标签,与Deployment的selector中的matchLabels匹配
spec:
containers:
- name: nginx # 容器名称
image: nginx:latest # 使用nginx的官方镜像
ports:
- containerPort: 80 # 容器暴露的端口,Kubernetes将此端口映射到集群内部的服务
---
apiVersion: v1 # 资源类型,Service属于v1版本
kind: Service # 资源类型,Service用于暴露Pod的网络访问
metadata:
name: nginx-service # Service的名称
spec:
selector:
app: nginx # Service选择器,将流量路由到所有标签为app: nginx的Pod
ports:
- protocol: TCP # 使用TCP协议
port: 80 # 暴露Service的端口
targetPort: 80 # 目标端口,指向容器的80端口
type: LoadBalancer # 将Service暴露为负载均衡器,可以使其被外部访问
C++
施工中。。。
项目设置
使用xmake创建项目并进行项目转换
# 创建 C++ 项目
xmake create -l c++ -P 项目名
# 项目转换信息设置
xmake f --toolchain=llvm --runtimes=c++_shared -cv --vs=2022
# 转换为 vs 项目
xmake project -k vsxmake
# 使用 VisualStudio 或 Rider 打开项目开发即可
git 配置
# 设置 git init 时全局默认分支
git config --global init.defaultBranch dev
# 设置全局默认提交分支
git config --global push.default upstream dev
# 设置提交信息
git config user.name "you-name"
git config user.email "you-mail"
xmake常用命令
一、创建程序
示例:
xmake create -l c++ -P hello
参数说明:
- create:创建一个新项目
- -l c++:项目语言为c++
- -P hello:更改到给定的项目目录,这里是hello
更多参数可以使用命令:xmake create --help
查看
使用创建模板程序
示例:
xmake create -l c++ -t console -P hello
参数说明:
- -t console:使用控制台模版
创建静态库程序
使用模板创建
xmake create -l c++ -t static hello
创建动态库程序
使用模板创建
xmake create -l c++ -t shared hello
二、运行程序
示例:
## 以 hello 程序为例
# 进入程序目录
cd hello
# 编译程序
xmake
# 运行程序,默认debug
xmake run
# release 编译
xmake f -m release
三、xmake.lua
xmake的工程描述文件xmake.lua虽然基于lua语法,但是为了使得更加方便简洁得编写项目构建逻辑,xmake对其进行了一层封装,使得编写xmake.lua不会像写makefile那样繁琐
基本上写个简单的工程构建描述,只需三行就能搞定,例如:
target("test")
set_kind("binary")
add_files("src/*.c")
更多配置语法参数:https://xmake.io/#/zh-cn/guide/syntax_description
四、包管理
4.1 xrepo
xrepo 是一个基于 Xmake 的跨平台 C/C++ 包管理器。
它基于 xmake 提供的运行时,但却是一个完整独立的包管理程序,相比 vcpkg/homebrew 此类包管理器,xrepo 能够同时提供更多平台和架构的 C/C++ 包。
并且还支持多版本语义选择,另外它还是一个去中心化的分布式仓库,不仅仅提供了官方的 xmake-repo 仓库,还支持用户自建多个私有仓库。
同时,xrepo 也支持从 vcpkg/homebrew/conan 等第三方包管理器中安装包,并提供统一一致的库链接信息,方便与第三方项目的集成对接。
如果你想要了解更多,请参考:在线文档, Github 以及 Gitee
4.2 使用 vcpkg 包
add_requires("vcpkg::zlib", "vcpkg::pcre2")
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("vcpkg::zlib", "vcpkg::pcre2")
我们也可以加个包别名,简化对add_packages
的使用:
add_requires("vcpkg::zlib", {alias = "zlib"})
add_requires("vcpkg::pcre2", {alias = "pcre2"})
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("zlib", "pcre2")
如果 vcpkg 包带有可选特性,我们也可以直接使用 vcpkg 的语法格式 packagename[feature1,feature2]
来安装包。
add_requires("vcpkg::boost[core]")
v2.6.3 之后,xmake 支持 vcpkg 新的清单模式,通过它,我们就能支持 vcpkg 包的版本选择,例如:
add_requires("vcpkg::zlib 1.2.11+10")
add_requires("vcpkg::fmt >=8.0.1", {configs = {baseline = "50fd3d9957195575849a49fa591e645f1d8e7156"}})
add_requires("vcpkg::libpng", {configs = {features = {"apng"}}})
target("test")
set_kind("binary")
add_files("src/*.cpp")
add_packages("vcpkg::zlib", "vcpkg::fmt", "vcpkg::libpng")
v2.6.8 之后,还可以额外配置私有仓库,仅清单模式有效。
local registries = {
{
kind = "git",
repository = "https://github.com/SakuraEngine/vcpkg-registry",
baseline = "e0e1e83ec66e3c9b36066f79d133b01eb68049f7",
packages = {
"skrgamenetworkingsockets"
}
}
}
add_requires("vcpkg::skrgamenetworkingsockets >=1.4.0+1", {configs = {registries = registries}})
五、杂项
常用命令、技巧收集,默认都是程序目录执行。
命令 | 作用 |
---|---|
xmake project -k cmakelists | 将程序转换为cmake管理 |
xmake project -k vsxmake | 将程序转换为 Visual Studio 管理,使用 VS 做 IDE 有代码提示,调式方便( 推荐 ) |
chcp 65001 | CMD 临时设置UTF-8编码 |
chcp 936 | CMD 临时设置GBK编码 |
typora-copy-images-to: ./images
环境配置
Visual Studio Community
Visual Studio 可用于编辑、调试和生成代码,然后发布应用。除了大多数 IDE 都提供的标准编辑器和调试器之外,Visual Studio 还包括编译器、代码补全工具、图形设计器以及许多其他功能,以增强软件开发过程。
下载地址:https://visualstudio.microsoft.com/zh-hans/
需要选中以下组件,然后一键盘安装即可。
配置支持C++23:
不能全局配置,只能为每个项目单独配置,右键项目名,在弹出菜单选择属性:
要修改的位置1:
要修改的位置2:
PS:如果使用xmake管理项目,上面的配置则不需要!!! 详情配置在:xmake修改C++模板为C++23
Visual Studio Code
Visual Studio Code是一个轻量级但功能强大的源代码编辑器,可在桌面上运行,适用于Windows、macOS和Linux。它内置了对JavaScript、TypeScript和Node.js的支持,并为其他语言和运行时(如C++、C#、Java、Python、PHP、Go、.NET)提供了丰富的扩展生态系统
下载地址:https://code.visualstudio.com/
下载好直接安装即可。
xmake
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
虽然,简单易用是 xmake 的一大特色,但 xmake 的功能也是非常强大的,既能够像 Make/Ninja 那样可以直接编译项目,也可以像 CMake/Meson 那样生成工程文件,还有内置的包管理系统来帮助用户解决 C/C++依赖库的集成使用问题。
目前,xmake主要用于C/C++项目的构建,但是同时也支持其他native语言的构建,可以实现跟C/C++进行混合编译,同时编译速度也是非常的快,可以跟Ninja持平。
安装说明:https://xmake.io/#/zh-cn/guide/installation
方式一、Windows PowerShell 安装命令:
Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content
方式二、下载安装包:
下载地址:https://github.com/xmake-io/xmake/releases
下载好直接安装即可。
Visual Studio Community 和
Visual Studio Code 安装 xmake 插件
直接插件商店搜索安装即可。
系统编译设置为UTF-8
如图所示:
第 8 步 点完会提示重启,取消即可。当然也可选择直接重启。
环境配置-LLVM
Windows:
windows 环境采用的版本:LLVM 下载地址:https://github.com/mstorsjo/llvm-mingw/releases
Linux:
Linux 环境采用的版本:LLVM 下载地址:https://github.com/llvm/llvm-project/releases
不管系统如何,使用当前最新版本即可。
代码编辑器 VSCode 配置:
项目使用 VSCode 打开后会产生 .vscode 目录,以下文件放在 .vscode 目录内。
c_cpp_properties.json
{
"configurations": [
{
"name": "LLVM",
"includePath": [
"${workspaceFolder}/**",
"D:\\Dev\\LLVM\\llvm-mingw\\include**" // Windows 示例,修改为你的实际路径
// "/opt/llvm19/include**" // Linux 示例,修改为你的实际路径
],
"defines": [],
"compilerPath": "D:\\Dev\\LLVM\\llvm-mingw\\bin\\clang++.exe", // Windows 示例,修改为你的实际路径
// "compilerPath": "/opt/llvm19/bin/clang++.exe", // Linux 示例,修改为你的实际路径
"cStandard": "c23",
"cppStandard": "c++23",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug with LLDB",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}\\build\\windows\\x64\\debug\\he.exe", // 可执行文件路径,修改为你的实际生成路径
"args": [], // 启动时传递给程序的参数
"cwd": "${workspaceFolder}", // 工作目录
"stopOnEntry": false, // 是否在入口处停下
"preLaunchTask": "Debug Build", // 在启动调试前执行的任务(如编译)
"terminal": "integrated", // 使用 VSCode 内置终端
"env": {},
"MIMode": "lldb",
"miDebuggerPath": "D:\\Dev\\LLVM\\llvm-mingw\\bin\\lldb.exe", // Windows 示例,修改为你的实际路径
// "miDebuggerPath": "/opt/llvm19/bin/lldb.exe", // Linux 示例,修改为你的实际路径
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
settings.json
{
"clang-format.executable": "D:\\Dev\\LLVM\\llvm-mingw\\bin\\clang-format.exe", // Windows 示例,修改为你的实际路径
// "clang-format.executable": "/opt/llvm19/bin/clang-format.exe", // Linux 示例,修改为你的实际路径
"clang-format.style": "Google", // 设置为 Google 风格
"editor.formatOnSave": true, // 保存时自动格式化
"editor.defaultFormatter": "ms-vscode.cpptools", // 设置默认格式化工具
"C_Cpp.intelliSenseEngine": "disabled", // 关闭默认的 IntelliSense 引擎
"C_Cpp.autocomplete": "default", // 启用默认的自动补全
// "C_Cpp.autocomplete": "disabled", // 关闭默认的自动补全
"clangd.path": "D:\\Dev\\LLVM\\llvm-mingw\\bin\\clangd.exe", // Windows 示例,修改为你的实际路径
// "clangd.path": "/opt/llvm19/bin/clangd.exe", // Linux 示例,修改为你的实际路径
"clangd.arguments": [
"--background-index", // 在后台生成索引
"--clang-tidy", // 启用 clang-tidy 来分析代码
"--completion-style=detailed", // 提供详细的补全信息
"--header-insertion=iwyu", // 自动补全时插入必要的头文件
"--cross-file-rename=true", // 支持跨文件重命名
"-std=c++23",
"--log=verbose"
],
"editor.wordBasedSuggestions": "off", // 关闭词汇级别的建议(避免干扰)
"editor.suggestSelection": "first", // 提示列表中优先选择第一个候选项
"files.associations": {
"*.h": "cpp", // 让 .h 文件也作为 C++ 文件进行处理
"*.mpp": "cpp",
"*.hpp": "cpp"
},
"[cpp]": {
"editor.defaultFormatter": "xaver.clang-format",
"editor.quickSuggestions": {
"comments": "on",
"strings": "on",
"other": "on"
},
"editor.wordBasedSuggestions": "matchingDocuments" // C++ 语言的词汇补全
},
"[json]": {
"editor.defaultFormatter": "vscode.json-language-features"
},
"[c]": {
"editor.wordBasedSuggestions": "matchingDocuments", // C 语言的词汇补全
"editor.quickSuggestions": {
"comments": "on",
"strings": "on",
"other": "on"
},
},
"[cuda-cpp]": {
"editor.wordBasedSuggestions": "matchingDocuments" // CUDA-C 语言的词汇补全
},
"[jsonc]": {
"editor.defaultFormatter": "vscode.json-language-features"
}
}
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "Debug Build", // Debug 编译
"type": "shell",
"command": "xmake f -m debug --toolchain=llvm --runtimes=c++_shared -cv ; xmake -rv", // Windows 示例(PowerShell)
"command": "xmake f -m debug --toolchain=llvm --runtimes=c++_shared -cv && xmake -rv", // Linux 示例
"options": {
"cwd": "${workspaceFolder}", // 指定工作目录为 "build" 子目录
"env": {
"PATH": "${env:PATH};D:\\Dev\\LLVM\\llvm-mingw\\bin;D:\\Dev\\xmake;" // Windows 示例,以你实际安装路径为准
// "PATH": "${env:PATH}:/opt/llvm19/bin:/opt/xmake/bin" // Linux 示例,以你实际安装路径为准
}
},
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "Release Build", // Release 编译
"type": "shell",
"command": "xmake f -m release --toolchain=llvm --runtimes=c++_shared -cv ; xmake -rv", // Windows 示例(PowerShell)
"command": "xmake f -m release --toolchain=llvm --runtimes=c++_shared -cv && xmake -rv", // Linux 示例
"options": {
"cwd": "${workspaceFolder}", // 指定工作目录为 "build" 子目录
"env": {
"PATH": "${env:PATH};D:\\Dev\\LLVM\\llvm-mingw\\bin;D:\\Dev\\xmake;" // Windows 示例,以你实际安装路径为准
// "PATH": "${env:PATH}:/opt/llvm19/bin:/opt/xmake/bin" // Linux 示例,以你实际安装路径为准
}
},
"group": {
"kind": "build",
"isDefault": false
}
},
{
"label": "Run", // 运行程序,需要先 Release Build 或者 Debug Build
"type": "shell",
"command": "xmake run",
"options": {
"cwd": "${workspaceFolder}", // 指定工作目录为 "build" 子目录
"env": {
"PATH": "${env:PATH};D:\\Dev\\LLVM\\llvm-mingw\\bin;D:\\Dev\\xmake;" // Windows 示例,以你实际安装路径为准
// "PATH": "${env:PATH}:/opt/llvm19/bin:/opt/xmake/bin" // Linux 示例,以你实际安装路径为准
}
},
"group": {
"kind": "build",
"isDefault": false
}
}
]
}
配置安装后,测试了Linux、Windows 平台,编译、运行、调式 都没有问题,但代码提示无!!!
C++23 代码提示
目前只有Windows环境可行,使用 xmake 将项目转换为 VisualStudio 项目,命令如下:
# 配置项目信息
xmake f --toolchain=llvm --runtimes=c++_shared -cv --vs=2022
# 转换为 VisualStudio 项目
xmake project -k vsxmake
# 执行成功后会在项目目录生成 vsxmake2022 文件夹, 进入此目录,打开 “项目名.sln” 即可进行开发
TIPS: 使用 VisualStudio 开发的话无需配置 VSCode。
基础语法
待完成。。。
数据类型
待完成。。。
变量与常量
待完成。。。
运算符
待完成。。。
控制结构
待完成。。。
函数
待完成。。。
类与对象
待完成。。。
继承与多态
待完成。。。
模板
待完成。。。
STL标准库
待完成。。。
异常处理
待完成。。。
C++20新特性
待完成。。。
C++23新特性
待完成。。。
内存管理
待完成。。。
并发编程
待完成。。。
输入输出流
待完成。。。
C++调试与优化
待完成。。。