vcpkg笔记

vcpkg笔记

vcpkg是一个C++的包管理器。
包管理器是专门管理一些代码库的。比如一些大佬们开源的一些NB的框架,我们可以用vcpkg将他们放到自己的项目中。然后就可以直接用了。

当开发者需要使用第三方库时,一种方便的方法是使用包管理器。vcpkg是一种流行的工具,用于在C++项目中管理和安装第三方库。本文将介绍如何在Windows环境下使用CMake和vcpkg构建项目。

安装vcpkg

在使用vcpkg之前,需要先安装它。可以在官方网站上下载最新版本的vcpkg,

将下载好的目录添加到环境变量,我的目录是

C:\dev\vcpkg

双击或使用以下命令进行编译:

.\bootstrap-vcpkg.bat

运行完,文件夹中多出个vcpkg.exe,即为成功。

image-20230218134328365

编译安装完成后,可以使用以下命令测试vcpkg是否安装成功:

查看版本:
vcpkg version

查看帮助:
vcpkg help

image-20230218134431281

(可选)Vcpkg和Visual Studio的集成

什么是集成?

上面我们已经安装了一些第三方库,那如何使用呢?常规情况下,我们需要设置include目录、lib目录等,会有很多工作量。Vcpkg提供了一套机制,可以全自动的适配目录,而开发者不需要关心已安装的库的目录在哪里,也不需要设置。这是Vcpkg的一大优势。

集成到全局

“集成到全局”适用于Visual Studio开发环境和msbuild命令行。执行命令:

vcpkg integrate install

当出现“Applied user-wide integration for this vcpkg root.”字样的时候,说明已经集成成功。这时候可以在任意的工程中使用安装好的第三方库。

移除全局集成

移除全局集成只要执行下列命令即可:

vcpkg integrate remove

集成到工程

上面已经可以集成到全局,为什么还要“集成到工程”呢?因为在大部分情况下,我们不希望集成到全局,毕竟有很多第三方库我们希望自定义处理一下,或者干脆不想集成第三方库。那么集成到工程是最灵活的处理方式。也是工程级项目推荐的处理方式。

“集成到工程”是整个vcpkg中最复杂的一项,它需要利用Visual Studio 中的nuget插件来实现。我们接下来一步一步来说。

生成配置

执行命令

vcpkg integrate project

这时候会在“<vcpkg_dir>\scripts\buildsystems”目录下,生成nuget配置文件.

其中<vcpkg_dir>是指vcpkg实际所在目录。

基本配置

打开Visual Studio,点击菜单“工具->NuGet包管理器->程序包管理器设置”,进入设置界面,点击“程序包源”。

img
点击“加号”增加一个源。修改源的名字为vcpkg。在“源”的选项中点击右侧的"…"选择vcpkg目录下的“scripts\buildsystems”目录,然后点击右侧的“更新按钮”。

点击“确定”,关闭设置对话框。

到此,全局性的设置已经完成,以后不必再重复设置了。

工程配置

用Visual Studio 打开一个工程或解决方案。右键点击需要设置的工程,选择“管理NuGet程序包”。在右上角的“程序包源”中选择刚刚设置的“vcpkg”。这样在“浏览”选项卡中就可以看到“vcpkg.H.Repos.vcpkg”。点击最右侧的“安装”。这样就可以集成到某个工程了。

img


img

集成到CMake

最新的Visual Studio 2015和2017大力支持CMake工程,所以对cmake的支持当然不能少。在cmake中集成只要在cmake文件中加入下面这句话即可。

-DCMAKE_TOOLCHAIN_FILE=<vcpkg_dir>/scripts/buildsystems/vcpkg.cmake"

其中<vcpkg_dir>是指vcpkg实际所在目录。

集成静态库

Vcpkg默认编译链接的是动态库,如果要链接静态库,目前还没有简便的方法。需要做如下操作

  1. 用文本方式打开vcxproj工程文件
  2. 在xml的段里面增加如下两句话即可
<VcpkgTriplet>x86-windows-static</VcpkgTriplet>
<VcpkgEnabled>true</VcpkgEnabled>

在CMake中集成静态库,需要额外指令

cmake .. -DCMAKE_TOOLCHAIN_FILE=.../vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x86-windows-static

安装库

安装和配置vcpkg后,可以使用以下命令安装第三方库:

vcpkg install <library>

其中,<library>表示要安装的库的名称。例如,要安装fmt库,可以使用以下命令:

vcpkg install fmt

安装完成后,库的头文件和库文件将位于vcpkg安装目录的installed\x64-windows文件夹中。

创建CMake项目

安装和配置vcpkg后,可以使用CMake构建项目。

下面是一个简单的示例项目,该项目使用了fmt库。

创建项目文件夹

首先,创建一个名为cmake-vcpkg的文件夹,并将其作为CMake项目文件夹。

创建源代码文件

cmake-vcpkg文件夹中创建一个名为main.cpp的源代码文件,并添加以下内容:

#include <fmt/core.h>
#include <iostream>

int main()
{
    fmt::print("Hello, world!\n");
    return 0;
}

此代码使用fmt库输出“Hello, world!”字符串。

创建CMakeLists.txt文件

cmake-vcpkg文件夹中创建一个名为CMakeLists.txt的文件,并添加以下内容:

cmake_minimum_required(VERSION 3.10)

project(cmake-vcpkg)

find_package(fmt CONFIG REQUIRED)

add_executable(cmake-vcpkg main.cpp)

target_link_libraries(cmake-vcpkg PRIVATE fmt::fmt)

此代码包括以下步骤:

  • cmake_minimum_required(VERSION 3.0)指定CMake最低版本为3.0。
  • project(cmake-vcpkg)定义项目名称为cmake-vcpkg
  • find_package(fmt CONFIG REQUIRED)查找并配置fmt库。
  • add_executable(cmake-vcpkg main.cpp)创建一个可执行文件。
  • target_link_libraries(cmake-vcpkg PRIVATE fmt::fmt)将fmt库链接到可执行文件。

构建项目

A 命令行链接库库

A 现在可以使用以下命令构建项目:

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

其中,build是构建目录的名称,C:/dev/vcpkg是vcpkg安装目录的路径。

B 将 vcpkg 作为一个子模块

当您希望将 vcpkg 作为一个子模块加入到您的工程中时,
您可以在第一个 project() 调用之前将以下内容添加到 CMakeLists.txt 中,
而无需将 CMAKE_TOOLCHAIN_FILE 传递给 CMake 调用。

set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake"
  CACHE STRING "Vcpkg toolchain file")  

使用此种方式可无需设置 CMAKE_TOOLCHAIN_FILE 即可使用 vcpkg,且更容易完成配置工作。

posted @ 2023-02-19 19:00  Dapenson  阅读(402)  评论(0编辑  收藏  举报