首页 > 其他分享 >【ToolChains】CLion(VS2019) + CMake + Vcpkg 的使用

【ToolChains】CLion(VS2019) + CMake + Vcpkg 的使用

时间:2023-09-05 13:34:17浏览次数:40  
标签:集成 CMake VS2019 开源 Vcpkg spdlog vcpkg 安装

参考博客:

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

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 库了,如下图所示:

标签:集成,CMake,VS2019,开源,Vcpkg,spdlog,vcpkg,安装
From: https://www.cnblogs.com/RioTian/p/17679342.html

相关文章

  • 记录一个 qt+cmake 项目不生成 ui_xxx.h 文件的问题
    最近做一个Qt的项目的代码迁移到新平台,遇到一个问题。这个项目使用的CMake构建脚本,项目中的某个ui文件怎么都不能生成对应的ui_xxx.h文件,其他的文件都没有问题,使用qmake构建也没有问题。经过排查,问题原因如下:#include"ui_xxx.h"上面#include和后面的头文件之间没有空格......
  • vs2019快捷键注释不起作用
      使用:  再一次:Ctrl+/ 反注释。 ......
  • cmake 命令行带参数
    CMake命令行可以带有一些参数,用于控制和配置CMake的行为。这些参数可以在执行cmake命令时传递给CMake。以下是一些常用的CMake命令行参数:-D:用于设置CMake变量。例如,-DVAR_NAME=VALUE可以设置一个CMake变量的值cmake-DVAR_NAME=VALUEpath_to_source_directory-G......
  • 如何在CMAKE中指定python路径——使用cmake为python编译扩展模块时指定python路径
     答案:cmake-DPython3_EXECUTABLE=/path/to/bin/python3   =================================================    参考:https://stackoverflow.com/questions/49908989/cmake-cant-find-python3   =================================== ......
  • vs2019-cuda配置入门
    cuda使用如下1、打开VS,新建C++空项目 2、右击源文件->添加->新建项 3、选择CUDAC/C++File,名称位main.cu 4、把下面的示例源码复制到main.cu中#include"cuda_runtime.h"#include"device_launch_parameters.h"#include<stdio.h>/***************************......
  • Windows10 环境下使用 Cmake 和 MinGW-w64 编译安装 OpenCV 4.0.1
    Windows10环境下使用Cmake和MinGW-w64编译安装OpenCV4.0.1翻译搜索复制......
  • cmake学习方法+CHI独占+ctags编写+C/C++语言原子的序+单核比多核快的C代码
    cmake学习方法主要是cmake这个东西好像有点抽象,而我想要的是完完全全的控制,虽然是花里胡哨的;但是在高手看来,这些东西有点过家家,而不是真正意义上的技术,甚至经常被怼,净是花拳绣腿,不容易阅读,控制效果不好,有时候还有语法错误云云。因此我还是用的Makefile,但是想必cmake是更好的,因......
  • [转]vcpkg+opencv4(sfm+vtk)+openMVS+SFM算法-github代下载(http://gitd.cc/)
    1、vcpkg+opencv4(sfm+vtk)+openMVS+SFM算法-github代下载(http://gitd.cc/)2、OpenMVS详细安装教程(ubuntu18.04)3、ubuntu18.04安装openMVS......
  • 【转载】CMake从头开始学习-上
    这篇文章写的太好了非常适合新手入门,原文链接是https://subingwen.cn/cmake/CMake-primer/index.html......
  • cmake定义宏
    比如在打印日志信息的时候定义宏test.cpp#include<stdio.h>#defineNUMBER3intmain(){inta=10;#ifdefDEBUGprintf("我是一个程序猿,我不会爬树...\n");#endiffor(inti=0;i<NUMBER;++i){printf("hello,GCC!!!\n");......