Windows 下使用 vcpkg + CMake 进行开发

article/2025/10/4 19:15:09

Windows 下使用 vcpkg + CMake 进行开发

vcpkg

vcpkg 是一款开源的、基于源代码的 C++ 依赖管理器。简单地说,用户可以使用 vcpkg 安装自己需要的 C++ 依赖。

将 vcpkg 的整个仓库克隆在本地,再执行提供的脚本,即可完成 vcpkg 的部署,详情参见 vcpkg 仓库的 README 或 网站上的说明材料。

无论是 vcpkg 还是之后安装软件包的代码,很多都是从 GitHub 取得的,因此可能需要用户具有相应的网络访问环境。

一般,每月只需要两瓶矿泉水钱,就能买到可以用的代理。

笔者实验时,vcpkg 会自动使用系统代理(如果进行了相应的配置),但执行 git clone 可能需要在终端中手动设置 HTTP 和 HTTPS 代理服务器地址相关的环境变量

vcpkg 的若干实例是互不影响的。可以在计算机上部署多个 vcpkg 的实例。

针对其这个特性,用户可以切换到 vcpkg 的目录下再执行命令,而不是将 vcpkg 可执行文件的路径添加到 PATH。

由于 vcpkg 是基于源代码的,因此在安装软件包之前,需要用户先安装微软的编译器 MSVC。除此之外,还需要额外安装 Visual Studio 的英语(English)语言包,才能顺利执行安装操作。

也可以使用 MSYS2 作为开发环境使用 vcpkg,但是笔者暂未实验,故不作展开。

以安装 OpenCV 为例

以安装 OpenCV 为例,用户在终端中切换到 vcpkg 的安装目录后,执行下面命令即可安装 OpenCV:

PS> ./vcpkg install opencv

需要注意,对于 OpenCV 以及其他一些包,vcpkg 在安装时有不同的 feature 可供选择。可以在 vcpkg 网站上检索包对应的信息,或者使用 ./vcpkg search <packagename> 进行检索。

比如,我们可以执行下面的命令,选择需要的 feature 并进行安装:

PS> ./vcpkg install opencv[core,dnn,jpeg,png,quirc,tiff,webp]

之后便会开始相对比较漫长的代码编译过程,可能会耗费约数十分钟或更久。同样,建议将 vcpkg 的目录添加进反病毒软件的排除项,可以加快速度。

除此之外,在 Windows 上,上述命令默认将会构建针对 x86-windows 平台的 OpenCV,我们还需要手动指定构建安装针对 x64-windows 平台的 OpenCV。

./vcpkg install opencv:x64-windows

编译过程中会产生很多文件(如 vcpkg 目录下的 buildtrees 目录,存放构建过程中产生的文件,如果保留可能会减少下次更新时花费的时间),可能会占用十数 GB 的磁盘空间。可以根据需要删除这些中间文件。

使用 vcpkg 中安装的包

在如上述文章安装好 OpenCV 后,只需要在 CMakeLists.txt 中使用 find_package(OpenCV REQUIRED) 即可引入需要的安装包。

在使用时可能还需要为 CMake 传入正确的参数,也就是 vcpkg 工具链的路径,具体操作将会在下文介绍。

CMakeLists.txt 示例

一个完整的 CMakeLists.txt 文件类似如下:

project(CMAKE_OPENCV_TEST)
cmake_minimum_required(VERSION 3.13)find_package(OpenCV REQUIRED)
# message("${OpenCV_DIR}")add_executable(main "hello.cpp")
target_link_libraries(main ${OpenCV_LIBS})

有些通过 vcpkg 安装的包,支持作为 CMake 目标引入,比如 {fmt} 库。

# 安装 fmt 库
PS> ./vcpkg install fmt
PS> ./vcpkg install fmt:x64-windows

这样的库安装好后,vcpkg 会有相应的提示:

安装支持 CMake 目标的库后,vcpkg 会有相应的提示
控制台最后输出如下:

The package fmt provides CMake targets:find_package(fmt CONFIG REQUIRED)target_link_libraries(main PRIVATE fmt::fmt)# Or use the header-only versionfind_package(fmt CONFIG REQUIRED)target_link_libraries(main PRIVATE fmt::fmt-header-only)

也就是说,在 CMakeLists.txt 中可以这样子使用这样的库:

project(CMAKE_VCPKG_FMT_TEST)
cmake_minimum_required(VERSION 3.13)find_package(fmt CONFIG REQUIRED)add_executable(main "hello.cpp")
target_link_libraries(main fmt::fmt)
# 或者使用“仅头文件(header-only)”版本的 fmt
# target_link_libraries(main fmt::fmt-header-only)

CMake 传参

在 CMake 配置过程中,需要将 vcpkg 目录下的 scripts/buildsystems/vcpkg.cmake 文件路径,作为 CMAKE_TOOLCHAIN_FILE 变量传入,这样 CMake 就可以识别到该 vcpkg 实例中安装的包了。

比如,假设 vcpkg 的目录位于 C:/dev/vcpkg/,则需要在 CMake 的“Configure Args”中添加:

-DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake

这个选项通常可以在 IDE 的构建选项中找到。如果使用命令行界面,则可以采用类似如下的命令:

cmake \-B [build directory] \-S . \-DCMAKE_TOOLCHAIN_FILE="[path to vcpkg]/scripts/buildsystems/vcpkg.cmake"

需要注意,如果路径中包含空格,在 Shell 需要使用引号将路径包裹起来,以便Shell 将其视作一个整体传递给 CMake 程序。但如果在 IDE 中,则需要根据具体情况判断是否需要使用引号将路径包裹起来(即,IDE 在传递参数时,是直接将字符串传入给可执行程序,还是将其拼接在命令的最后并通过 Shell 界面执行命令)。

如果有其他需要转义的字符,也需要根据 IDE 配置参数的方式,决定是否需要转义。比如,如果 IDE 使用配置文件的形式进行配置,则可能需要按照字符串字面量的转义方式对特殊符号进行处理;假如是在图形界面中输入的,则一般不需要对特殊符号进行转义。

Visual Studio Code

VS Code 中的配置实际上是修改 CMake Tools 插件的配置,关于插件的使用见上一篇博文。

在这里插入图片描述
这个选项也可以设置成目录的(而非全局的),也就是在工作目录下新建一个 .vscode 目录,在其中新建一个 settings.json,并在其中添加一个键名为 cmake.configureArgs 、值为一个列表的键值对。

列表中添加一个定义 CMAKE_TOOLCHAIN_FILE 变量的选项:

"cmake.configureArgs": ["-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=TRUE","-DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake"
]

settings.json 文件类似如下:

{"cmake.configureArgs": ["-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=TRUE","-DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake"]
}

其他的 IDE 配置类似。

Visual Studio

在 Visual Studio 的搜索中 查找 CMake Settings for Project
在 Visual Studio 的搜索中 查找 CMake Settings for Project
这会在 CMake 项目下生成一个 CMakeSettings.json 文件,我们可以在某个配置(比如 x64-Debug)下的 cmakeCommandArgs 里添加相应的参数:

{"configurations": [{"name": "x64-Debug","generator": "Ninja","configurationType": "Debug","inheritEnvironments": [ "msvc_x64_x64" ],"buildRoot": "${projectDir}\\out\\build\\${name}","installRoot": "${projectDir}\\out\\install\\${name}","cmakeCommandArgs": "", // 在这里添加相应的参数"buildCommandArgs": "","ctestCommandArgs": ""}]
}

CLion

CLion 的配置也是类似,在“文件(Files)”->“设置(Settings)”->“构建、执行、部署(Build, Execution, Deplyment)”->“CMake” 中,在某个配置中的 CMake options 中添加相应的 -D 参数。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/CTFEXyUD.shtml

相关文章

windows安装vcpkg过程下载失败问题的解决方法

vcpkg的中文文档&#xff1a;https://github.com/microsoft/vcpkg/blob/master/README_zh_CN.md 第一步&#xff1a; 从GitHub拉取 git clone https://github.com/Microsoft/vcpkg.git 如果GitHub拉取超时可以运行下面两行代码解决 git config --global --unset http.proxy …

【配置环境】Windows和Linux下安装和使用C/C++第三方库管理工具vcpkg

目录 一&#xff0c;环境准备 二&#xff0c;vcpkg简介 三&#xff0c;Window系统下载vcpkg 四&#xff0c;Linux系统下载vcpkg 五&#xff0c;vcpkg命令介绍 1.命令参照表 2.常用的vcpkg命令以及详细解释 一&#xff0c;环境准备 Git - Downloads 根据平台下载最新版本…

vcpkg:使用 vcpkg

命令 查看Vcpkg支持的开源库列表 查看Vcpkg支持的开源库列表 .\vcpkg\vcpkg search安装一个开源库 这里的“安装”其实是指下载和编译。 比如我们需要安装常用的jsoncpp库&#xff0c;那么执行命令 .\vcpkg\vcpkg install jsoncpp输出 Computing installation plan... A …

【vcpkg】vcpkg:用于 Windows、Linux 和 macOS 的 C++ 包管理器

官网:https://docs.microsoft.com/zh-cn/cpp/build/vcpkg?viewmsvc-160&viewFallbackFromvs-2019 vcpkg vcpkg 是用于 C 的一种命令行包管理器。 它极大地简化了 Windows、Linux 和 macOS 上第三方库的购置与安装。 如果项目要使用第三方库&#xff0c;建议通过 vcpkg 来…

在Visual Studio中激活vcpkg环境

在Visual Studio 2022 17.4中&#xff0c;vcpkg环境现在会自动激活。 一个vcpkg环境是由一个manifest文件描述的&#xff0c;该文件捕获了构建应用程序所必需的工件&#xff08;了解更多关于vcpkg工件的信息&#xff09;。 当前vcpkg工件的体验主要是针对嵌入式开发人员&…

Visual Studio工具 vcpkg简介

vcpkg是命令行包管理工具&#xff0c;在使用第三方库的c或c开发中可以简化相关的配置操作。vcpkg安装的包支持Visual Studio 2015 update 3及以上版本&#xff0c;包括vs2017工具集&#xff0c;目前在windows平台已有超过900多个包&#xff0c;linux平台超过350个包。在默认情况…

windows 下包管理工具vcpkg安装

主要参考博文&#xff1a;vcpkg安装及使用_我叫电池的博客-CSDN博客_vcpkg安装 由于需要在离线环境下面搭建开发环境&#xff0c;所有的包只能离线安装了&#xff0c;包括这个管理工具vcpkg的安装&#xff0c;也必须是离线安装。 一. 下载安装vcpkg管理工具 下载目录&#x…

Vcpkg介绍及使用

Vcpkg用于在Windows、Linux、Mac上管理C和C库&#xff0c;极大简化了第三方库的安装&#xff0c;它由微软开源&#xff0c;源码地址&#xff1a;https://github.com/Microsoft/vcpkg&#xff0c;最新发布版本为2023.04.15 Release&#xff0c;它的license为MIT。 在windows上安…

Vcpkg C/C++库管理工具安装和使用教程(链接VS2019)

1、概述&#xff1a; Vcpkg是可用于Windows&#xff0c;linux和MacOS上跨平台的 C/C 库管理工具&#xff0c;是一款开源工具。在此对vcpkg的安装做一个简要的说明&#xff0c;有关具体命令的使用&#xff0c;在安装成功后使用 vcpkg help 或者 vcpkg help[comment] 可以获取特…

vcpkg安装及使用

vcpkg安装及使用 参考链接 1. 安装 内容复制自官方文档 首先&#xff0c;请下载vcpkg并执行 bootstrap.bat 脚本。 它可以安装在任何地方&#xff0c;但是通常我们建议您使用 vcpkg 作为 CMake 项目的子模块&#xff0c;并将其全局安装到 Visual Studio 项目中。我们建议您使…

vcpkg安装指定版本的库

由于fmt版本过高&#xff0c;部分依赖其的库使用时会报错&#xff08;错误 C2338 Cannot format an argument. To make type T formattable provide a formatter<T> specialization&#xff09;。 vcpkg install fmt:x64-windows 默认装的是fmt9.1.0&#xff0c;但是…

vcpkg基本使用

1. vcpkg安装 将下列powershell代码存成ps1文件&#xff0c;在目录下shift右键->打开power shell窗口&#xff0c;运行脚本后vcpkg即安装完成。 # 1. 创建目录、下载vcpkg&#xff1a; mkdir -f D:/APPs cd D:/APPs # github # git clone https://github.com/microsoft/vc…

Visual Studio开源库集成器Vcpkg全教程--利用Vcpkg轻松集成开源第三方库

利用Vcpkg轻松集成开源第三方库 1. 为什么要用Vcpkg 1.1. 传统使用开源库的方法 1.1.1. 编译工具1.1.2. 编译类型1.1.3. 工程目录设定 1.2. Vcpkg的优点 2. 获取Vcpkg 2.1. 下载Vcpkg2.2. 编译Vcpkg 3. 使用Vcpkg 3.1. 查看Vcpkg支持的开源库列表3.2. 安装一个开源库3.3. 指定编…

VCPKG安装和使用教程

文章目录 1. 安装2. 使用命令选项 3. 集成vcpkgWindows 上的 Visual Studio 集成Linux 或 macOS 上的 Visual Studio Code 集成删除 vcpkg 集成 使用举例4. 详细介绍4.1 新增库4.2 删除库4.3 查看已经安装的列表4.4 更新已经安装的开源库 1. 安装 去GitHub上下载源码&#xff…

vcpkg快速入门手册

文章目录 1. 简介2. 安装与使用2.1 获取vcpkg2.2 编译vcpkg2.3 vcpkg的文件夹层次结构2.4 设置vcpkg的环境变量2.5 vcpkg的常用命令2.6 安装包与Visual Studio集成 3. 常见的C库的CMake配置方式3.1 Boost3.2 cereal3.3 Ceres Solver3.4 CGAL3.5 FLANN3.6 GDAL3.7 GLEW3.8 GMP3.…

vcpkg安装和使用--学习入门

前言 vcpkg是一个C的包管理器。 包管理器是专门管理一些代码库的。比如一些大佬们开源的一些NB的框架&#xff0c;我们可以用vcpkg将他们放到自己的项目中。然后就可以直接用了。 我用的win10vs2019 【1】安装 &#xff08;1&#xff09;先git clone下载下来vcpkg文件夹。 …

Vcpkg 的安装与使用

Vcpkg 的安装与使用 欢迎大家来我的博客逛逛&#x1f44f;&#xff1a;hauhau.cn 需求 先确保你已经安装了: Windows7 及以上的版本GitVisual Studio 2015 Update 3 及以上的版本 关于美化 Windows Terminal 及 Powershell&#xff0c;可以查看这篇优秀文章: Windows-Termi…

C++第三方库管理工具vcpkg使用教程

目录 一、vcpkg介绍二、vcpkg安装1、安装vs英语语言包2、更新PowerShell版本3、配置终端4、clone vcpkg 三、vcpkg具体使用1、演示安装jsoncpp库2、指定位数安装3、查找支持的系统架构4、查看已经安装了哪些库5、如何卸载vcpkg 四、如何集成到visual studio1、集成到Visual Stu…

NS版暗黑破坏神3金手指开发教程(12)

上一节&#xff0c;我们了解到了宝石升级动画延时机制的修改&#xff0c;这一节&#xff0c;我们将全方位地介绍游戏中多个常用功能的延时机制修改&#xff0c;优化玩家的游戏体验&#xff0c;相信经过本节&#xff0c;读者的程序分析能力会有进一步提高 1. 我们首先从鉴定传奇…

NS版暗黑破坏神3金手指开发教程(2)

上一节&#xff0c;介绍了开发金手指所需的工具&#xff0c;这一节&#xff0c;正式开始简单的金手指修改 1. 首先&#xff0c;分别要准备好2.6.6的main.elf和原始版本待调试信息的DiabloIIINX64ra.elf&#xff0c;因为我们要修改的是2.6.6版本的elf&#xff0c;和最初带调试信…