参考博客:

环境一

IDE:CLion 2023.2.2 已购置许可证一年(可永久使用许可证结束期限内最后一个版本)

编译件:MSVC2019 + Clang

How To Install VS Microsoft C++ Build Tools on Windows

Configuring the Clang compiler under Windows

环境二

IDE:Qt Creator 4.10 & 11.0.3

编译件:MinGW

Vcpkg

概述

Vcpkg 是微软社区开发的一个跨平台的 C++ 包管理工具。它旨在解决 C++ 开发过程中依赖管理的痛点,它支持多个操作系统,包括:Windows、Linux和 macOS,使开发者能够更加便捷地安装、管理和更新 C++ 项目所需的第三方库。

Vcpkg 优势

相对于编译开源库的传统方法,使用 Vcpkg 的优点如下:

  • 跨平台支持:Vcpkg 支持 Windows、Linux 和 macOS 等多个主流操作系统,使得开发者能够在不同的环境下进行一致的依赖管理。

  • 自动解决依赖:Vcpkg 能够自动处理库之间的依赖关系,简化了依赖管理的复杂性,并且能够提供一致的库版本。

  • 简单易用:Vcpkg 的命令行接口使得安装、更新和卸载库都变得简单快捷,节省了开发者的时间。

  • 集成 Visual Studio:不需要设置库文件、头文件的所在目录,自动集成。

Vcpkg 下载和安装

这一步、跟随官网文档中即可,https://vcpkg.io/en/getting-started

注意,Windows 下推荐使用 PowerShell 7 或者最新版本进行终端操作。 安装包下载地址:Downloads

git clone https://github.com/Microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat

添加环境变量

将 vcpkg.exe 的路径添加到环境变量,即可在任意位置执行 vcpkg 命令:

# 系统环境变量中添加
VCPKG_ROOT
D:\Soft\Language\vcpkg
VCPKG_DEFAULT_TRIPLET
x64-windows

更新 Vcpkg

vcpkg 包管理器在 GitHub 上定期更新。 若要将 vcpkg 的克隆更新到最新版本,执行 git pull 命令即可。

git pull

再次执行引导脚本:

./bootstrap-vcpkg.bat

Vcpkg 使用

安装一个开源库

这里以安装 spdlog 库为例进行演示。安装第三方开源库的命令为 vcpkg install pkgname

# 默认安装
# 如果不指定安装的架构,vcpkg 默认把开源库编译成 x86 的 Windows 版本的库:
vcpkg install spdlog

执行结果如下:

编译完成后可以在目录中看到库的位置:

指定位数安装

如果要安装编译某一个架构的开源库,我们只需要在需要安装的包后面指定相应的 triplet 即可。例如要编译 64 位 Windows 版本的 spdlog,执行如下命令:

vcpkg install spdlog:x64-windows
# 以下是 Linux 端的 Sample
vcpkg install spdlog:x64-linux # 同样,若要编译安装静态库,只需加上 -static 即可:
vcpkg install spdlog:x64-windows-static

删除一个开源库

要删除一个已安装的开源库的命令为:vcpkg remove pkgname:

vcpkg remove spdlog:x64-windows

执行库删除命令后,其源码包和解压缩的源码并没有删除,若再次安装直接进行编译步骤:

更新一个开源库

列出需要更新的库

可以使用 update 或者 upgrade 命令列出需要更新的库:

vcpkg update
# 也可以使用 upgrade 命令:
vcpkg upgrade

更新过时的库

不带参数使用 upgrade 命令时将一次升级所有过时的库。但默认情况下 upgrade 命令只列出要升级的库,但不升级它们。

# 要有效地升级它们,应该使用 -no-dry-run 选项:
vcpkg upgrade --no-dry-run

更新指定的库

upgrade 可以指定一个或多个库名称作为参数:

vcpkg upgrade spdlog:x64-windows --no-dry-run 

开源库查询

查询一个开源库

使用 search 命令可以查询 vcpkg 中是否包括指定的库:

vcpkg search spdlog

查询已安装的开源库

使用 list 命令可以查询当前已经安装的开源库:

vcpkg list

导出一个开源库

通常在项目中使用第三方开源库时会把其拷贝到项目文件夹中使用,使用 export 命令可以导出指定的开源库:

vcpkg export spdlog:x64-windows --zip

导出的压缩包位于根目录中:

如下图所示,导出的压缩包中包含了引用库需要的 include、lib 等目录:

或者直接从根目录的 packages 中拷贝对应的库文件夹也可以。

Vckpg 集成

通常情况下要使用第三方库我们需要设置 include、lib 等目录。

Vcpkg 提供了一套机制,可以全自动的适配目录,而开发者不需要关心已安装的库的目录在哪里。

Vckpg 集成到 Visual Studio

全局集成

全局集成即在任意的 Visual Studio 项目中可直接使用已安装的第三方库,使用 integrate install 命令可集成到全局:

vcpkg integrate install

如下示例:集成后可在任意项目中直接使用 spdlog 库:

移除全局集成

若要移除全局集成,执行integrate remove 命令即可:

vcpkg integrate remove

移除后项目引用的第三库即已不可用:

集成到项目

Visual Studio 也支持把 Vcpkg 集成到指定的某个项目中,是利用 Visual Studio 中的 nuget 插件来实现。

  1. 生成配置文件

    执行命令 integrate project 生成 nuget 配置文件:

    vcpkg integrate project
    # 生成下方命令
    Install-Package "vcpkg.D.Soft.Language.vcpkg" -Source "D:\Soft\Language\vcpkg"

  1. 打开程序包管理器控制台

    通过菜单 “工具-NuGet 包管理器-程序包管理器控制台” 打开控制台界面:

复制在上一步界面中提示的命令,粘贴到控制台界面中,然后执行:

现在 demo 项目中已经可以直接使用 Vcpkg 中安装的第三方库,如下图所示:

集成到 CMake

在 Vcpkg 中安装每个库的时候都会有提示怎么在 CMake 中引用,以 spdlog 库安装为例:

CMakeList.text 示例

使用 CLion 新建一个项目,在 CMakeList.text 中添加以下内容:

cmake_minimum_required(VERSION 3.25)

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_TOOLCHAIN_FILE "D:/Soft/Language/vcpkg/scripts/buildsystems/vcpkg.cmake")

if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET)
set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "")
endif() project(spdlogTest) add_executable(spdlogTest main.cpp) find_package(spdlog CONFIG REQUIRED)
target_link_libraries(spdlogTest PRIVATE spdlog::spdlog_header_only)

库引用示例

此时在项目中即可使用 spdlog 库了,如下图所示:

【ToolChains】CLion(VS2019) + CMake + Vcpkg 的使用的更多相关文章

  1. 使用clion+cmake+vcpkg的开发现代的c++跨平台程序

    使用clion+cmake+vcpkg的开发现代的c++跨平台程序 使用c++开发跨平台的程序 背景 在开发过程中,使用c++作为开发语言,通常被认为是痛苦的,啰嗦的,超长开发时间的.最近几年有各种各 ...

  2. vs2019+cmake实现Linux远程开发

    在上一篇文章中我们介绍了使用vs2019作为远程Linux系统的开发环境,但我们是创建的传统的sln项目,而对于Linux开发者来说以autotools或是cmake进行项目结构的组织更为简单直观,也 ...

  3. Clion在一个cmake项目中运行多个main函数

    # 遍历项目根目录下所有的 .cpp 文件 file (GLOB files *.cpp */*.cpp) foreach (file ${files}) string(REGEX REPLACE & ...

  4. Clion+Cmake+Qt5+Qwt+msys2+MinGW在Windows下的安装配置使用教程

    摘要: CLion, a cross-platform C/C++ IDE. 本文主要介绍基于Clion作为IDE, MinGW作为编译器,CMake作为项目构建工具,开发基于Qt5.qwt的C++图 ...

  5. clion结合vcpkg以及GTest的使用

    目录 一.vcpkg简介.下载和使用 1. vcpkg是什么 2. vcpkg下载 3. 使用vcpkg下载第三方库 二.clion结合vcpkg 1. 方法一:使用环境变量 2. 方法二:添加cma ...

  6. OpenCV3.3.0 + CLion + CMake 配置(Mac巨细无敌版)

    目录 开始 完成了 参考链接: 1,cmake编译 http://blog.csdn.net/baidu_36316735/article/details/53168438 2,CLion导入open ...

  7. Linux+CLion+树莓派远程编译时,Cmake编译出现undefined reference to 'pthread_create'的解决办法

    在CLion中开发讯飞的linux语音库时编译出现以下问题: undefined reference to 'pthread_create' CLion的cmake配置:修改CMakeLists.tx ...

  8. Tips for vcpkg

    概述 vcpkg是微软开发的在Windows, Linux和MacOS平台管理C/C++库的开源工具. 快速开始 要求 使用vcpkg需满足如下条件: Windows 10, 8.1, 7, Linu ...

  9. clion调试postgresql

    clion怎么调试postgresql呢? clion使用cmake去编译项目的,但是大家编译postgresql用的是make.虽然项目中也有CMakeLists.txt文件,但是cmake会报错, ...

  10. Clion + opencv环境搭建(体验最好的C++ IDE)

    前言: 一个好的开发环境,是程序猿梦寐以求的,对于opencv的开发,一直觉得vs虽然牛逼但太庞大,所以后来用了codeblocks,然后又觉得无论是vs还是codeblocks都不够美观,代码提示也 ...

随机推荐

  1. 【luogu题解】P5461 赦免战俘

    一.题目 现有 \(2^n\times2^n\ (n≤10)\) 名作弊者站成一个正方形方阵等候 kkksc03 的发落.kkksc03 决定赦免一些作弊者.他将正方形矩阵均分为 4 个更小的正方形矩 ...

  2. Linux驱动开发笔记(五):驱动连接用户层与内核层的文件操作集原理和Demo

    前言   驱动写好后,用户层使用系统函数调用操作相关驱动从而实现与系统内核的关联,本篇主要就是理解清楚驱动如何让用户编程来实现与内核的交互.   杂项设备文件操作集 cd /usr/src/linux ...

  3. Qt+FFmpeg仿VLC接收RTSP流并播放

    关键词:Qt FFmpeg C++ RTSP RTP VLC 内存泄漏 摘要认证 花屏 源码 UDP 本系列原文地址. 下载直接可运行的源码,在原文顶部. 效果 产生RTSP流 比播放文件复杂一点是, ...

  4. 深入 K8s 网络原理(二)- Service iptables 模式分析

    目录 1. 概述 2. 准备 Service 和 Pods 资源 3. K8s 里 Service 的实现原理 3.1 kube-proxy 组件 3.2 iptables 简介 3.3 iptabl ...

  5. 【UniApp】-uni-app-打包成网页

    前言 经过上一篇文章的介绍,已经将这个计算器的计算功能实现了,接下来就是我们项目当中的一个发包上线阶段,我模拟一下,目的就是为了给大家介绍一下,uni-app是如何打包成网页的. 除了可以打包成网页, ...

  6. 结合 element -Plus组件库,压缩图片大小,限制图片格式

    业务背景:业务上需求满足上传的图片不能太大,但是有时候上传的图片确实超过了限制大小,所以前端这边可以将图片压缩再上传,亦或者是上传给后端接口的图片只能是指定格式,我们前端需要将图片后缀转化,也可以处理 ...

  7. P4928 [MtOI2018]衣服?身外之物! 题解

    题意 gcd 共有 \(n\) 件衣服,编号为 \(A_1,A_2,\cdots A_n\). 每一件衣服分别拥有颜色值和清洗时间,他在每一件衣服穿完以后都会将其送去清洗,而这件衣服当天所拥有的舒适感 ...

  8. 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 09.第二个游戏规则:玩家重生

    斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本文对应课程15章,60 - Refining Player Respawns. 在本篇文章中,将会为游戏新增加 ...

  9. ElasticSearch-2

    原文链接:https://gaoyubo.cn/blogs/cbe60a4d.html 一.DSL查询文档 1.1DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain S ...

  10. Programming Abstractions in C阅读笔记:p246-p247

    <Programming Abstractions in C>学习第68天,p246-p247总结,总计2页. 一.技术总结 本章通过"the game of nim(尼姆游戏) ...