目录
vscode: cmake + vcpkg + clangd + lldb调试的一体化IDE配置
介绍
cmake是一个c++的跨平台构建工具
vcpkg是c++的包管理工具,可以和cmake配合使用,方便地引入第三方库。
clangd是一个LSP(Language Server Protocol),实时提供对代码的智能提示,个人认为比vs的编译器内部错误生成器好用得多。推荐与clang编译器和libc++标准库一同使用。它们都是LLVM计划的一部分。
本教程的目标是将vscode打造为集代码提示、一键构建、包管理为一体的IDE。
让你更深入地了解c++构建的方方面面。
需求
-
系统:windows11
-
有可用的c/c++编译器:MSVC、clang、gcc等(需要加入环境变量)
本教程包含clang编译器的下载,可以不提前准备。
-
本地git(加入环境变量)
-
基本的电脑知识
-
基本的c++构建过程理解
-
网络环境
准备工作
-
下载vcpkg
-
打开任意终端,git clone
git clone https://github.com/microsoft/vcpkg.git
-
运行启动脚本
cd vcpkg
:移动到下载好的目录.\bootstrap-vcpkg.bat
:执行安装脚本 -
添加环境变量
复制vcpkg的安装目录。
添加一个环境变量,名为
VCPKG_ROOT
,值为安装目录。用于以后脚本配置的路径变量。添加一个
path
环境变量,值为安装目录。便于其他程序查找vcpkg,
-
-
下载cmake
下载地址:
https://cmake.org/download/
选择Windows x64 installer。
安装时选择添加到环境变量。
-
下载llvm包
下载地址:
https://github.com/llvm/llvm-project/releases
选择第一个,展开Assets。
下载Assets中的
llvm-版本·windows-X64.tar.xz
。解压到一个文件夹。
将文件夹中的
bin
目录加到path
环境变量。bin
中包含了我们下一步需要使用的clangd.exe
、clang++.exe
等等。
vscode插件配置
- clangd
[!NOTE]
vscode中使用
ctrl + ,
进入设置
设置搜索clangd:path
,输入clangd.exe
的绝对路径。
在项目根目录创建一个文件.clangd
。
用来控制代码提示的一些细节。将它放在项目根目录下(否则clangd可能找不到)。
以下是本教程中必要的一个设置,复制到.clangd
中:
CompileFlags:
CompilationDatabase: "path/to/your/compile_commands.json"
[!NOTE]
path/to/your 意思就是找到这个文件的路径,复制进去,路径因人而异。
compile_commands.json
是CMake开放给LSP的一个文件,它给出了项目构建命令,便于LSP查找所需的头文件,给出代码提示。它现在还未生成,先不着急。
- clang-format
设置搜索clang-format:Executable
,输入clang-format.exe
的绝对路径。
设置搜索default formatter
,选择clang-format
。
(可选) 在设置中启用format on save
,然后保存就可以格式化代码了。
(可选) 设置搜索clang format style
,输入你想要的代码规范(比如google、LLVM),或者写一个.clang-format
文件,使用file:path\to\your\.clang-format
来指定格式化细节。具体编写方式自行搜索。
- codelldb
用于调试,点击侧边栏的“运行与调试”,开始调试,因为你现在没有launch.json
,他会帮你生成一个,类似于
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/<executable file>",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
修改program
的值,路径指向编译生成的可执行文件(先不着急,因为还没配置cmake)。
- cmake, cmake tools(两个插件)
搜索cmake path
,输入上一步安装的cmake的绝对路径。
[!NOTE]
绝对路径的意思是从盘符(C:、D:等)开始,一直到你所需文件的完整路径。
项目配置文件
vcpkg的两个文件:
vcpkg用于指定项目依赖的文件。
-
生成清单文件:
[!NOTE]
按 ctrl + `打开终端
打开vscode内置终端,输入vcpkg new --application
。
会生成vcpkg.json
和vcpkg-configuration.json
文件
-
终端输入
vcpkg add port fmt
(测试用,fmt是一个常见的c++格式输出库)可以看到
vcpkg.json
中添加了一个fmt
,这就是vcpkg给项目添加的依赖库。
CMakeLists.txt:
CMake构建所必须的脚本文件,它指定了项目的相关信息。
新建在项目目录下。
cmake_minimum_required(VERSION 3.10)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
#构建时生成compile_commands.json(重要)
project(test)
#项目名
find_package(fmt CONFIG REQUIRED)
#让cmake去找fmt这个第三方库
add_executable(test path/to/your/源文件)
#编译目标文件
target_link_libraries(main PRIVATE fmt::fmt)
#指定要链接的第三方库
)
CMakePresets.json
CMake tools
的相关命令所需的预设文件。
新建在项目目录下。
{
"version": 8,
"configurePresets": [
{
"name": "vcpkg",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out",//构建目录
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"//vcpkg和cmake之间的联动
}
}
]
}
这里面CMAKE_TOOLCHAIN_FILE
是最重要的,其中使用到了第一步中设置的VCPKG_ROOT
环境变量,一定要保证设置成功。
vcpkg.cmake
这个文件指定了cmake如何去查找第三方库,这直接决定了CMakeLists.txt
中的find_package
能否成功找到。
尝试构建
#include <fmt/core.h>
int main(){
fmt::print("Hello,world!");
}
以上是示例程序。
- 按
ctrl + shift + p
。 - 输入
Cmake:Configure
。在这一步中,CMake会尝试下载要求的第三方库。 - 如果成功了(return 0),输入
Cmake:Build
,尝试构建可执行程序。[build] Build finished with exit code 0
说明构建成功,否则失败。如果失败了,注意构建信息中的Error信息,尝试理解一下。 - 输入
Cmake: run without debugging
运行程序。
如果以上操作都成功了,终端输出Hello,world!
,以后一个Cmake: run without debugging
就可以运行程序了,可以为它设置一个键盘快捷方式(ctrl + k + s
打开设置)。
前面未完成的工作
-
clangd:如果构建并运行成功了,在你指定的构建目录下应该有一个
compile_commands.json
文件,复制文件地址,在.clangd
中填到CompilationDatabase:
后面。命令面板输入restart language server
,如果智能提示出现,说明clangd配置完成。 -
lldb调试:在
launch.json
的program:
后填入构建目录下的可执行程序的地址。按f5尝试开始debug。如果提示找不到文件,看看路径填对没有。
总结
clangd、cmake、vcpkg的入门到此结束,在使用中出现的问题都可以google搜索,99%的问题都已经有了答案。
标签:clangd,cmake,vscode,clang,json,vcpkg,构建 From: https://www.cnblogs.com/yuzujr/p/18530675