【C++】windows11环境包管理工具vcpkg配置和教程
文章目录
- 【C++】windows11环境包管理工具vcpkg配置和教程
- vcpkg 概述
- Vckpg 下载和安装
- 先决条件
- 下载安装
- 初识vcpkg:新建helloworld项目
- 集成到 Visual Studio
- 全局集成和移除
- 集成到项目
- 总结
vcpkg 概述
开源库绝大部分都来源于 Linux 系统、将其移植到 Windows 的 VC 开发环境下编译比较复杂和麻烦,因此 vcpkg 于 2016 年推出,最初由微软开发,并开源在 GitHub 上,可帮助开发人员将项目迁移到较新版本的 Visual Studio。 vcpkg 是 Microsoft 和 C++ 社区维护的免费开放源代码 C/C++ 包管理器,用于简化第三方库的获取、构建和管理过程,现在已演变成 Windows、macOS 和 Linux 上开发人员使用的跨平台工具。 vcpkg 拥有大量开放源代码库注册表和企业就绪功能,旨在通过支持任何构建和项目系统来促进开发过程。
Vckpg 下载和安装
先决条件
- C++ 编译器:对于 Windows ,Visual Studio 的 MSVC(Microsoft Visual C++ 编译器)是 C++ 开发所需的编译器。
- CMake:CMake是一个开源的跨平台构建工具,用于管理软件项目的构建过程,它使用简单的配置文件(来描述项目的构建规则,然后根据这些规则生成适用于不同平台和编译器的构建脚本或项目文件。
- Git:为 Windows 用户提供了 Git 的核心工具集,并且模拟了一个类 Unix 的环境,能够在类 Unix 的环境中使用 Git 和其他命令行工具。
下载安装
- GitHub 克隆 vcpkg 存储库:存储库包含用于获取
vcpkg 可执行文件的脚本,以及由 vcpkg 社区维护的特选开放源代码库的注册表。# 在合适的路径下拷贝vcpkg 库 git clone https://github.com/microsoft/vcpkg.git
- 运行启动脚本:设置 vcpkg 的工作环境,包括构建必要的工具和配置文件。
cd vcpkg && bootstrap-vcpkg.bat
初识vcpkg:新建helloworld项目
1.配置 VCPKG_ROOT 环境变量
# 设置 VCPKG_ROOT 告知操作系统 vcpkg 的根目录(自己的安装路径)
set "VCPKG_ROOT=D:\ProgramData\vcpkg"
# 将 vcpkg 的根目录添加到系统的 PATH 环境变量
set PATH=%VCPKG_ROOT%;%PATH%
上述方式设置环境变量只会影响当前终端会话,若要在所有会话中永久更改存在,需要在“Windows 系统环境变量”上进行设置。
2.创建项目目录
# 创建helloworld文件夹并进去文件夹目录下
mkdir helloworld && cd helloworld
3.添加依赖项和项目文件
# 创建清单文件
vcpkg new --application
注意:有python基础的都或多或少了解annaconda,vcpkg与anaconda的作用类似,vcpkg清单的作用类似于annaconda的虚拟环境,每个清单之间是互相独立的。
–application:这个标志告知 vcpkg 创建一个应用程序项目,而不是库项目。项目模板更适合包含主程序的应用程序。
vcpkg.json:用于定义项目的 vcpkg 配置,包括依赖库的版本和其他设置。现在目前是空的:
vcpkg-configuration.json:配置文件,用于存储与 vcpkg 相关的各种全局配置设置,对于 vcpkg 的行为和配置具有重要作用。
defaultRegistry:默认注册表的位置。
kind:指定注册表的类型,Git 仓库类型的注册表。
baseline:指定注册表的版本(通过Git的提交哈希),vcpkg 将使用这个特定版本的注册表,因为 vcpkg 管理的一堆包,任何包更新都会有新版本,就必须有新的哈希唯一指定,保证此前使用的一组旧版本包能够正常使用,确保使用的是确定的包列表。
repository:指定 Git 仓库的 URL。
registries:一个数组,列出 vcpkg 可以从哪些注册表下载包。
kind:指定注册表的类型,artifact 表示静态的、预构建的注册表,通常是从某个 URL 下载的 ZIP 文件。
location:指定注册表的下载位置。
name:用于给注册表指定一个名称,方便在 vcpkg 中引用。
name 是一个标签或者是一个配置的别名,你可以通过这个标签来快速选择或切换到特定的配置。
baseline 是一个具体的版本号,它确保了不管你何时使用这个配置,都会锁定到这个特定的版本,防止因为库的更新导致的问题。
# 添加 fmt 依赖项
vcpkg add port fmt
4.创建项目文件
MakeLists.txt 文件内容:
# 项目所需的 CMake 最低版本为 3.10,低于此版本则将生成错误
cmake_minimum_required(VERSION 3.10)
# 项目的名称
project(HelloWorld)
# CMake 配置文件查找 fmt 库, REQUIRED 关键字在找不到包时生成错误
find_package(fmt CONFIG REQUIRED)
# 添加 main.cpp 源文件, 生成 "HelloWorld," 可执行目标。
add_executable(HelloWorld main.cpp)
# 指定 HelloWorld 可执行文件应链接到 fmt 库, PRIVATE 关键字表明 fmt 仅在生成 HelloWorld 时需要
target_link_libraries(HelloWorld PRIVATE fmt::fmt)
main.cpp 文件内容:
//在此 main.cpp 文件中,包含用于使用 <fmt/core.h> 库的 fmt 标头
#include <fmt/core.h>
int main()
{ // main() 函数调用 fmt::print() 将 "Hello World!" 消息输出到控制台
fmt::print("Hello World!\n");
return 0;
}
5.运行 CMake 配置
要允许 CMake 项目系统识别 vcpkg 提供的 C++ 库,需要提供 vcpkg.cmake 工具链文件。 在"helloworld" 项目目录中新建 CMakePresets.json 文件:
{
"version": 2,
"configurePresets": [
{
"name": "default",
"generator": "Visual Studio 16 2019",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
}
}
]
}
version:CMake 配置文件的版本。这里的值 2 表示这是一个使用 CMake 3.20 及更高版本的配置文件。
configurePresets:数组,包含了一个或多个配置预设。每个预设都定义了 CMake 构建配置的一部分。
name:预设的名称,这里是 "default"。这个名称用于在命令行中引用该预设。
generator:指定 CMake 使用的构建工具(也称为构建系统)。在这里 使用 "Visual Studio 16 2019" 作为构建工具。
binaryDir:指定构建输出的目录。${sourceDir} 是一个 CMake 变量,代表源代码的根目录。这里设置为 ${sourceDir}/build,意味着构建输出将位于源代码根目录下的 build 文件夹中。
cacheVariables:定义了要在 CMake 缓存中设置的变量。
CMAKE_TOOLCHAIN_FILE 变量指定了 vcpkg 的工具链文件的路径,告诉 CMake 如何使用 vcpkg 来管理项目的依赖。
6. CMake 配置生成
# --preset 使用 CMakePresets.json 文件中定义的名为 "default" 的预设来配置和生成构建系统。
cmake --preset=default
7.生成项目
# 指定构建类型为 Release
cmake --build build --config Release
# 指定构建类型为 Debug
cmake --build build --config Debug
8.运行应用程序目
# 运行 Release 可执行文件
.\build\Release\HelloWorld.exe
# 运行 Debug可执行文件
.\build\Debug\HelloWorld.exe
集成到 Visual Studio
常规情况下,集成需要会有很多工作量如设置include目录、lib目录等。Vcpkg提供了一套机制,可以全自动的适配目录,而开发者不需要关心已安装的库的目录在哪里,也不需要设置。
Vcpkg优势:
- 简化库的管理:确保项目中使用的第三方库是最新的,并且可以方便地更新或回滚。
- 减少配置工作:自动化设置项目文件,避免手动添加库路径和编译标志。
- 提高编译效率:确保正确的编译选项和依赖关系,从而加快构建速度。
全局集成和移除
全局集成即在任意的 Visual Studio 项目中可直接使用已安装的第三方库,使用 integrate install 命令可集成到全局。
若要移除全局集成,执行integrate remove 命令即可:
# 集成 vcpkg 到 Visual Studio 的命令
vcpkg integrate install
若要移除全局集成,执行integrate remove 命令即可:
vcpkg integrate remove
集成到项目
利用 Visual Studio 中的 nuget 插件来实现集成到指定的某个项目中。
执行命令 integrate project 生成 nuget 配置文件:
# 建议在项目目录下执行
vcpkg integrate project
配置visual studio:“工具” -> “NuGet包管理器” -> “程序包管理设置” -> “NuGet包管理器” -> “程序包源”
-> 添加刚才生成的vcpkg配置文件路径。
设置visual studio使用vcpkg:“工具” -> “NuGet包管理器” -> “管理解决方案的NuGet程序包”,将程序包源设置成vcpkg,为工程安装vcpkg包管理器。
总结
尽可能简单、详细的介绍windows11上搭建环境包管理工具vcpkg的流程和简单的教程,后续会在当前配置的windows11环境上继续增加使用教程。
【官方参考1】
【参考2】
【参考3】