Skip to content

Commit 1332573

Browse files
committed
new: vscode_and_cpp_env
1 parent c44655e commit 1332573

14 files changed

Lines changed: 251 additions & 0 deletions
124 KB
Loading
88 KB
Loading
11.8 KB
Loading
28.1 KB
Loading
18.7 KB
Loading
141 KB
Loading
47.3 KB
Loading
35.9 KB
Loading
14.2 KB
Loading
Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,251 @@
1+
+++
2+
date = '2025-10-04T16:45:12+08:00'
3+
draft = false
4+
title = '搭建基于VSCode的跨平台C++学习环境'
5+
+++
6+
7+
## 前言
8+
9+
早期学习C/C++是非常痛苦的,不仅被老师要求下载20G的宇宙IDE VS,还得自己格式化代码,这就是我一开始对此不感冒的原因。
10+
11+
但是随着学的东西多了,不写代码也不行啊,我才渐渐发现有那么多强大的工具我不知道。
12+
13+
所以这里记录一下自己的折腾过程,希望能帮到初学C++的朋友们。
14+
15+
## 准备
16+
17+
由于我主要是在ArchLinux上面学习,偶尔会在Windows上面测试,这里大部分内容都会在Linux上面完成,不过别担心,这些工具都是跨平台的。
18+
19+
### Linux
20+
21+
很简单,直接安装这些软件包:
22+
23+
- **Clang** llvm的前端,包括了clangd既语言服务器
24+
- **GCC/LLVM** 编译器
25+
- **CMake** 依赖管理/构建系统
26+
- **Ninja** 构建器
27+
28+
### Windows
29+
30+
推荐用`scoop`一键解决,对于这些命令行工具可以说非常方便了。
31+
32+
需要安装的包:
33+
34+
- **llvm-mingw** 包含了clangd/clang了
35+
- **CMake**
36+
- **Ninja**
37+
38+
如果想`GCC`的话,可以到[WinLibs](https://winlibs.com/)下载:
39+
40+
41+
![winlibs](winlibs.webp)
42+
43+
一般来说下`UCRT`就行了,从`win10`之后都支持`UCRT`的。
44+
45+
---
46+
47+
安装VSCode不用多说了吧?
48+
49+
安装这些拓展:
50+
51+
- `CMake Tools`
52+
- `Clangd`
53+
- `CodeLLDB`
54+
55+
![extensions](extensions.webp)
56+
57+
### CMake拓展设置
58+
59+
按照如图显示的配置`CMake`生成的数据库文件,以便后续的`Clangd`查找。
60+
61+
![cmake_tools](cmake_tools.webp)
62+
63+
### Clangd拓展设置
64+
65+
填入`Clangd`寻找数据库的位置
66+
67+
![clangd](clangd.webp)
68+
69+
### CodeLLDB 拓展设置
70+
71+
安装完可能会下载一个调试包,对网络环境要求较高,如果遇到问题可以参考[这篇](https://zhuanlan.zhihu.com/p/566365173)文章。
72+
73+
## 创建项目
74+
75+
### 配置CMake
76+
77+
在你的项目根文件夹建立一个主`CMakeLists.txt`,内容可以这么写:
78+
79+
```cmake
80+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
81+
# 最低 CMake 版本要求
82+
cmake_minimum_required(VERSION 3.31)
83+
84+
# 项目名称和语言
85+
project(learnproj VERSION 1.0 LANGUAGES CXX)
86+
87+
# 设置 C++ 标准
88+
set(CMAKE_CXX_STANDARD 20)
89+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
90+
set(CMAKE_CXX_EXTENSIONS OFF)
91+
92+
93+
file(GLOB SUB_PROJECT_DIRS LIST_DIRECTORIES true ${CMAKE_CURRENT_SOURCE_DIR}/src/*)
94+
95+
# 遍历所有找到的目录
96+
foreach(SUB_DIR ${SUB_PROJECT_DIRS})
97+
# 检查该目录下是否存在 CMakeLists.txt 文件
98+
if(IS_DIRECTORY ${SUB_DIR} AND EXISTS "${SUB_DIR}/CMakeLists.txt")
99+
# 将该目录名打印出来,方便调试
100+
get_filename_component(PROJECT_NAME ${SUB_DIR} NAME)
101+
message(STATUS "Found and added subproject: ${PROJECT_NAME}")
102+
103+
# 将这个文件夹作为一个子项目添加进来
104+
add_subdirectory(${SUB_DIR})
105+
endif()
106+
endforeach()
107+
108+
109+
## 根据需要按需添加
110+
111+
# # 查找 Qt 库
112+
# find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
113+
114+
# 添加可执行文件
115+
116+
# # 链接 Qt 库
117+
# target_link_libraries(MyQtProject PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)
118+
119+
# # 自动处理 MOC、UIC 和 RCC
120+
# set_target_properties(MyQtProject PROPERTIES
121+
# AUTOMOC ON
122+
# AUTOUIC ON
123+
# AUTORCC ON
124+
# )
125+
```
126+
127+
你可以根据自己的需要,设置C++标准,扫描的文件夹,链接的库。这里就以`src`目录放置源文件,`include`放置头文件为例。
128+
129+
进入`src/current`创建一个子`CMakeLists.txt`,内容写上:
130+
131+
```cmake
132+
get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
133+
134+
## 如果你需要添加别的源文件,别忘了在这里添加文件名,空白符为分隔。
135+
add_executable(${PROJECT_NAME} main.cpp
136+
)
137+
138+
if(MSVC)
139+
target_compile_options(${PROJECT_NAME} PRIVATE /W4 /WX)
140+
else()
141+
## 非MSVC指定一些警告参数
142+
target_compile_options(${PROJECT_NAME} PRIVATE
143+
-Wall
144+
-Wextra
145+
-Wpedantic
146+
# -Werror
147+
-Wconversion
148+
)
149+
endif()
150+
151+
## 这里指定的头文件的路径
152+
153+
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../include/${PROJECT_NAME})
154+
```
155+
156+
创建一个`main.cpp`,内容可以为空,你的项目应该这样:
157+
158+
![project_init](project_init.webp)
159+
160+
---
161+
162+
接着我们给`CMake`生成一些预设。
163+
164+
![quick_start](quick_start.webp)
165+
166+
快速入门-添加新预设-从编译器创建
167+
168+
![create_from_compiler](create_from_compiler.webp)
169+
170+
你如果只装了`Clang`,那么用不带`cl`的就行,同样也可以用`GCC`,看个人喜好。
171+
172+
输入名字,这里我是用`平台-编译器-构建器-版本`来命名的,回车会自动生成一个`CMakePresets.json`,像这样:
173+
174+
![preset](preset.webp)
175+
176+
因为我比较喜欢`Ninja`,所以加入这一行。如果你想用`Make`,那么记得手动安装。
177+
178+
然后在这里添加新生成预设,从配置预设中构建,名字可以是构建预设后面加上`-build`
179+
180+
![build_preset](build_preset.webp)
181+
182+
然后在这里选一下就好了:
183+
184+
![choose_build_preset](choose_build_preset.webp)
185+
186+
下面的生成目标可以选择你的文件夹名称了:
187+
188+
![choose_build_target](choose_build_target.webp)
189+
190+
打开你的`main.cpp`,看看`clangd`怎么样?原来已经成功加载数据库并运行了:
191+
192+
![clangd_log](clangd_log.webp)
193+
194+
随便写点东西,然后点击左下角的生成,启动,你的代码应该可以运行了。
195+
196+
![build_and_run](build_and_run.webp)
197+
198+
### 配置task
199+
200+
有人说,哎,我的<key>F5</key>一键调试呢?
201+
202+
`.vscode/`下创建一个`launch.json`,写上:
203+
204+
```json
205+
{
206+
"version": "0.2.0",
207+
"configurations": [
208+
209+
{
210+
"type": "lldb",
211+
"request": "launch",
212+
"name": "Debug",
213+
"program": "${command:cmake.launchTargetPath}",
214+
"args": [],
215+
"console": "integratedTerminal",
216+
"cwd": "${workspaceFolder}",
217+
},
218+
219+
]
220+
}
221+
```
222+
223+
大功告成!
224+
225+
## 后续
226+
227+
### 格式化
228+
229+
你可能对于`Clangd`的格式化不太满意,那么可以在项目根目录创建一个`.clang-format`的文件,里面写上你想要的风格,具体可以去搜一下。
230+
231+
这是我的:
232+
233+
```yaml
234+
# .clang-format
235+
# 使用 LLVM 风格作为基础,这是很常见的风格
236+
BasedOnStyle: LLVM
237+
# 强制缩进宽度为 4 个空格
238+
IndentWidth: 4
239+
# 强制指针和引用靠左
240+
PointerAlignment: Left
241+
# 强制使用空格进行缩进,而不是制表符
242+
UseTab: Never
243+
```
244+
245+
### 其他
246+
247+
如果想添加头文件,直接往`include/<你的项目名字>`放置即可。
248+
249+
如果觉得项目不错,想保留代码,直接把`current`文件夹复制一份,改个名,运行的时候到`CMake`里面切换配置/生成目标就好。
250+
251+
如果你想用`MSVC`,那么可以下`VS Installer`,里面只选构建工具,不过注意这样是没法生成`compile_commands.json`给`Clangd`读取的。

0 commit comments

Comments
 (0)