添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我最近想要做一些 C++ 的项目,在正式开始之前,我需要先搭建环境,也是大概花了一个晚上,简单了解了一下现在 C++ 项目都是怎么构建的。

目前比较主流的两种包管理器:conan 和 vcpkg,我都试用了一下,个人感觉 vcpkg 的兼容性更好一些,应该可以帮我避不少坑,所以最终选择了使用 Vcpkg+CMake+VSCode 去构建我的编程环境。

我参考了 VsCode+Vcpkg+MSVC——C++开发环境配置 这篇文章,但是他有些地方的坑没讲明白,我重新整理和归纳一下。

  • C++ 编译器
  • Windows: Visual C++(目前使用)、MinGW
  • macOS: Clang、GCC
  • CMake
  • Windows: Download | CMake
  • macOS: brew install...
  • VSCode
  • CMake Tools
  • C/C++
  • vcpkg

    官方中文文档: vcpkg/README_zh_CN.md at master · microsoft/vcpkg · GitHub

    阅读 快速开始 的部分,按照指令一条条做。

    Git Clone 不下来?

  • 运用科技手段
  • 导入项目地址到 Gitee
  • Github 镜像下载网站
  • 运行 bootstrap-vcpkg.bat 或者 bootstrap-vcpkg.sh 卡住并且报错?

  • 运用科技手段
  • 去这个页面下载 vcpkg.exe : Releases · microsoft/vcpkg-tool (github.com) ,然后拷贝到 Clone 下来的 Git 根目录

    macOS 应该是下载 vcpkg-macos ,我没试过

    配置环境变量

    这一步网上很多人没讲,环境变量可以让后面路径的配置和维护方便很多。

    配置一个叫 VCPKG_ROOT 的变量,待会要用,地址就是刚才 Clone 的那个 Git 根目录。

    配置完之后检查一下:

    # powershell
    $env:VCPKG_ROOT
    # bash
    echo $VCPKG_ROOT
    

    安装一个库:

    .\vcpkg.exe install fmt:x86-windows
    

    安装依赖一般就是 [库名]:[编译目标]

    这里补充一个重点,一定要选择和自己的编译器一样的编译目标,我一开始用了 Visual C++ 的 64 位编译器,结果后面编译的时候一直出问题,因为 x86-windows 是 32 位的。

    添加依赖到 CMake

    切回到 CMake 项目中。

    CMakeLists.txt 中加入两条新的命令,find_packagetarget_link_libraries,编辑完之后大概是这个样子的:

    project(TestVcpkg VERSION 0.1.0)
    ......
    add_executable(TestVcpkg main.cpp)
    ......
    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(TestVcpkg PRIVATE fmt::fmt)
    

    target_link_libraries 必须在 find_packageadd_executable 后面。

    引入并使用一下 fmt 库试试。

    #include "fmt/format.h"
    int main(int, char **)
        fmt::print("Hello, world!\n");
    

    创建一个 CMake 项目,不知道怎么创建,可以参考后面的 VSCode 部分。

    构建项目:

    # powershell
    cmake -B . -S build -DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
    # bash
    cmake -B . -S build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
    
  • -B 后面跟着的是 CMakeLists.txt 的位置
  • -S 后面跟着的是编译到那个位置,一般都是项目目录下新建一个 build 目录
  • 最后跟着的是配置 CMAKE_TOOLCHAIN_FILE,需要用到之前配置的环境变量 VCPKG_ROOT
  • 编译项目:

    cmake --build build
    

    找到 build/Debug 下的可执行文件,运行一下就行了。

    不使用这个也能用,但是强烈推荐使用

    简单来说,就是依赖配置文件,会在你运行 CMake 的时候自动帮你安装依赖。

    务必要看一下这个:

    使用清单模式入门 | Microsoft Learn

    清单模式 | Microsoft Learn

    VSCode

    配置 VSCode 的主要目的是自动化上面的一些命令。

    建立 Cmake 项目

    VSCode 打开一个空目录,使用 Ctrl+Shift+P|⌘+⇧+P 打开 Command Palette,找到并运行 CMake: Quick Start

    vcpkg 加入 CMake 自动化编译流程

    VSCode 会在你更新 CMakeLists.txt 的时候帮你自动运行 CMake 命令,为了在运行的时候加入 CMAKE_TOOLCHAIN_FILE 的设置,你需要编辑 settings.json

    "cmake.configureSettings": { "CMAKE_TOOLCHAIN_FILE": "${env:VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", "VCPKG_TARGET_TRIPLET": "x86-windows"

    这样配置完之后相当于在 cmake 执行的时候加入了:

    -DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x86-windows
    

    这里用到的 ${env:VCPKG_ROOT} 就是上面提到的环境变量,而编译目标,取决于你使用的编译器。

    可以在 .vscode 文件夹下新建一个 settings.json,这样可以给每个项目自定义使用 x64-windows 还是 x86-windows

    到这一步为止,保存刷新一下 CMakeLists.txt,VSCode 应该没有报错,并且成功帮你编译好了 CMake,如果有问题,去检查一下上面的流程,特别是 vcpkg 官方文档的内容我没怎么提,仔细检查一下。

    识别和跳转 #include 头文件

    默认情况下,代码编辑器会有一个报错,#include 找不到 vcpkg 安装的库,但是执行 Debug 或者 Run 任务,都没有任何问题。

    这是因为 VSCode 没有在 vcpkg 的目录中找头文件。

    再次运行 Ctrl+Shift+P|⌘+⇧+P 打开 Command Palette,找到并使用 C/C++: Edit Configurations(JSON),它会创建一个 .vscode 文件夹,里面有一个 c_cpp_properties.json 文件,编辑其中的内容:

    "configurations": [ ...... "includePath": [ "${workspaceFolder}/**", "${env:VCPKG_ROOT}/installed/x64-windows/include", "${env:VCPKG_ROOT}/installed/x86-windows/include" ...... ......

    很多教程会在这里写上一个 ${vcpkgRoot}/x64-windows/include,其实这个 ${vcpkgRoot} 就是我们上面配置的 ${env:VCPKG_ROOT} 加上 installed

  •