当前位置: 首页 > ops >正文

C++包管理器vcpkg的使用

文档

https://learn.microsoft.com/zh-cn/vcpkg/get_started/get-started?pivots=shell-bash

搜索想要的包

https://vcpkg.io/en/packages?query=

安装vcpkg

1、获取源码

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg && ./bootstrap-vcpkg.sh

2、配置 VCPKG_ROOT 环境变量

# cat ~/.bash_profile
# vcpkg
export VCPKG_ROOT=/usr/local/vcpkg
export PATH=$VCPKG_ROOT:$PATH

3、安装检查

$ vcpkg --version
vcpkg package management program version 2025-06-02-145689e84b7637525510e2c9b4ee603fda046b56See LICENSE.txt for license information.

安装ninja

https://ninja-build.org/

下载对应平台的包,解压即可

ninja --version
1.12.1

使用

新建一个项目

# 创建项目目录
mkdir helloworld && cd helloworld# 创建清单文件
vcpkg new --application# 添加 fmt 依赖项
vcpkg add port fmt

创建必要的文件

创建文件 CMakePresets.json

{"version": 2,"configurePresets": [{"name": "vcpkg","generator": "Ninja","binaryDir": "${sourceDir}/build","cacheVariables": {"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"}}]
}

CMakeUserPresets.json

{"version": 2,"configurePresets": [{"name": "default","inherits": "vcpkg","environment": {}}]
}

创建文件 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)project(HelloWorld)find_package(fmt CONFIG REQUIRED)add_executable(HelloWorld helloworld.cpp)target_link_libraries(HelloWorld PRIVATE fmt::fmt)

创建文件 helloworld.cpp

#include <fmt/core.h>int main()
{fmt::print("Hello World!\n");return 0;
}

编译并运行项目

# 使用 CMake 配置生成
cmake --preset=default# 生成项目
cmake --build build# 运行应用程序
./build/HelloWorldHello World!

为了便捷,可以创建文件 Makefile

.PONEY: run
run:cmake --build build && ./build/HelloWorld

以后只要运行如下命令即可

make run

最终的项目文件

$ tree
.
├── CMakeLists.txt
├── CMakePresets.json
├── CMakeUserPresets.json
├── Makefile
├── helloworld.cpp
├── vcpkg-configuration.json
└── vcpkg.json
http://www.xdnf.cn/news/14093.html

相关文章:

  • RK全志平台LCD设备调试思路
  • JDBC基础(1)
  • python使用milvus教程
  • 使用 Git 将本地仓库上传到 GitHub 仓库的完整指南
  • 如何编写高效的Prompt:从入门到精通
  • 【Qt】QStateMachine状态机-实现播放按钮状态切换
  • Java 常用类 Math:从基础到高阶应用指南
  • 设计模式精讲 Day 1:单例模式(Singleton Pattern)
  • 将图片合成为视频(基于 OpenCV)
  • 【0.3 漫画数据结构与算法】
  • SNMP中BER编码解析
  • 微信小程序使用画布实现飘落泡泡功能
  • NLP学习路线图(四十八): NLTK
  • ​​实时人脸检测与人脸关键点识别系统实现
  • linux开机原理以及如何开关机-linux023
  • 同旺科技 USB TO SPI / I2C适配器(专业版)--EEPROM读写——B
  • 深入剖析 Celery:分布式异步任务处理的利器
  • 项目会议过多如何优化沟通效率
  • [论文阅读] 人工智能 | Gen-n-Val:利用代理技术革新计算机视觉数据生成
  • uni-app项目实战笔记6--同一组件使用Props传递不同的值
  • springMVC-13 文件下载及上传
  • 英伟达诉求1亿IOPS SSD:打破AI算力存储瓶颈
  • 从技术视角解析星黎语音交互机器人的创新与行业影响
  • 分布式定时任务系列12:XXL-job的任务触发为什么是死循环?
  • IPv4详解
  • FWFW - Find Websites From World
  • Vue3中v-bind=“$attrs“用法讲解
  • el-table跨页多选和序号连续
  • Burn 开源程序是下一代深度学习框架,在灵活性、效率和可移植性方面毫不妥协
  • 使用Docker安装FFmpeg