vscode: cmake + vcpkg + clangd + lldb调试的一体化IDE配置

介绍

cmake是一个c++的跨平台构建工具

vcpkg是c++的包管理工具,可以和cmake配合使用,方便地引入第三方库。

clangd是一个LSP(Language Server Protocol),实时提供对代码的智能提示,个人认为比vs的编译器内部错误生成器好用得多。推荐与clang编译器和libc++标准库一同使用。它们都是LLVM计划的一部分。

本教程的目标是将vscode打造为集代码提示、一键构建、包管理为一体的IDE。

让你更深入地了解c++构建的方方面面。

需求

  • 系统:windows11

  • vscode最新版

  • 有可用的c/c++编译器:MSVC、clang、gcc等(需要加入环境变量)

    本教程包含clang编译器的下载,可以不提前准备。

  • 本地git(加入环境变量)

  • 基本的电脑知识

  • 基本的c++构建过程理解

  • 网络环境

准备工作

  • 下载vcpkg

    1. 打开任意终端,git clone

      git clone https://github.com/microsoft/vcpkg.git

    2. 运行启动脚本

      cd vcpkg:移动到下载好的目录

      .\bootstrap-vcpkg.bat:执行安装脚本

    3. 添加环境变量

      复制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.execlang++.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用于指定项目依赖的文件。

  1. 生成清单文件:

    [!NOTE]

    按 ctrl + `打开终端

​ 打开vscode内置终端,输入vcpkg new --application

​ 会生成vcpkg.jsonvcpkg-configuration.json文件

  1. 终端输入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!");
}

以上是示例程序。

  1. ctrl + shift + p
  2. 输入Cmake:Configure。在这一步中,CMake会尝试下载要求的第三方库。
  3. 如果成功了(return 0),输入Cmake:Build,尝试构建可执行程序。[build] Build finished with exit code 0说明构建成功,否则失败。如果失败了,注意构建信息中的Error信息,尝试理解一下。
  4. 输入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.jsonprogram:后填入构建目录下的可执行程序的地址。

    按f5尝试开始debug。如果提示找不到文件,看看路径填对没有。

总结

clangd、cmake、vcpkg的入门到此结束,在使用中出现的问题都可以google搜索,99%的问题都已经有了答案。

posted @ 2024-11-06 17:48  yuzujr  阅读(1996)  评论(0)    收藏  举报