目录

[C++]CLion集成vcpkg一键完成包管理——以使用imgui为例


下载并集成vcpkg

首先,请确保 CLion 版本高于 2023.1。

按两下 shift 搜索 vcpkg ,并点击可进入 CLion 对 vcpkg 的支持模块。

如下图:

https://img-blog.csdnimg.cn/b8eb4824e2a24b86a648b12446cad108.png

CLion对vcpkg的操作模块如下:

https://img-blog.csdnimg.cn/14cf48c1a4bf46cab68a7046f8db94e6.png

上图中,由于我已经完成vcpkg的下载与集成,可以看到我已经安装的各种库。

如果你第一次来使用这个功能,那么可能需要点击左上角的四个按钮完成相应操作。

https://img-blog.csdnimg.cn/cfb6163a2dfb42fe8015bf7999c82258.png

由于你目前还没有创建vcpkg的集成,所以需要先点击那个加号。

会出现下列选项:

https://img-blog.csdnimg.cn/6cf95017f1564cc9961f0bc32ea0e4e2.png

上述图片中已经注释的很清楚了。

主要需要配置的是两类:

vcpkg的下载:

  1. 如果你本地之前没有下载好vcpkg,那么可以填写url来帮你下载和初始化,但是需要注意,下载的文件夹需要是一个不存在的文件夹。
  2. 如果你本地之前现在过vcpkg,你想要手动指定它,那么只需要在 Directory 中指定已经下载好的vcpkg的目录即可,而上述url将无效。

将vcpkg集成到cmake项目:

这里就比较简单了,点击集成到你目前CLion中已经存在的cmake运行的配置项即可。

有关CLion中cmake的运行配置项是什么,可以查看我B站的视频讲解:https://www.bilibili.com/video/BV18R4y127UV

完成这两步,你的vcpkg算是已经集成到了你的cmake项目。

其他三个按键,比如第二个编辑按键其实就是重新编辑每个集成的 vcpkg 的这几个参数罢了。

引入第三方库

我们已经集成好了vcpkg,那么我们以一个较为复杂的第三方库引入来跑跑看?

就决定是你了 Imgui !

我们直接到目前已经集成的vcpkg中搜索该库:

https://img-blog.csdnimg.cn/6d5c2538b7f24a1da7dc12ede9ccc109.png

如上图所示,我们有两种方式去编译安装该库:

  1. 在项目根目录下提供 vcpkg.json 文件来描述需要依赖的库,在cmake执行后自动下载编译。
  2. 手动选择需要编译的环境,然后手动点击install来进行安装。

这两种方式在编译安装好后都会提示你如何引入该库,如下图我已经编译安装好imgui了:

https://img-blog.csdnimg.cn/ee29b3fec2424e17a857627dad8282d5.png

你只需要把 main 替换为你的项目 target 即可完成库的引入。

集成cmake运行项目

现在你的项目虽然引入了 imgui ,但是你会发现你还是无法把官方的例子跑起来,因为官方的例子还依赖图形渲染引擎(这方面我也不是很懂)。

这里有作者对不同渲染引擎的例子如何跑起来的描述:https://github.com/ocornut/imgui/blob/c206a193737811193a0b48ef2d35fe028fa0996e/examples/README.txt#L160

介于我本机使用的是win11系统,所以我选择跑的是 example_win32_directx12 这个例子,描述如下:

example_win32_directx12/
    DirectX12 example, Windows only.
    = main.cpp + imgui_impl_win32.cpp + imgui_impl_dx12.cpp
    This is quite long and tedious, because: DirectX12.

依照提示把 example 中的这三个 cpp 源文件以及对应头文件加入编译即可跑通该示例。

对应文件url如下:

  • main.cpp:https://github.com/ocornut/imgui/blob/c206a193737811193a0b48ef2d35fe028fa0996e/examples/example_win32_directx12/main.cpp

  • imgui_impl_win32.cpp:https://github.com/ocornut/imgui/blob/c206a193737811193a0b48ef2d35fe028fa0996e/examples/imgui_impl_win32.cpp

  • imgui_impl_win32.h:https://github.com/ocornut/imgui/blob/c206a193737811193a0b48ef2d35fe028fa0996e/examples/imgui_impl_win32.h

  • imgui_impl_dx12.cpp:https://github.com/ocornut/imgui/blob/c206a193737811193a0b48ef2d35fe028fa0996e/examples/imgui_impl_dx12.cpp

  • imgui_impl_dx12.h:https://github.com/ocornut/imgui/blob/c206a193737811193a0b48ef2d35fe028fa0996e/examples/imgui_impl_dx12.h

如图所示项目目录以及cmake代码如下:

https://img-blog.csdnimg.cn/7f583c7a491949b8a164c6250f342423.png

当我们兴高采烈的准备跑起整个示例项目的时候,我们得到了一个长达几十行的符号链接错误。。。

很明显,肯定是有些使用到的库没有链接,进行相关检索以及推理判断,我终于找出还需要链接的两个库:d3d12 dxgi

改为如下cmake,终于成功跑起来了!

cmake_minimum_required(VERSION 3.14)
project(imgui_example)

set(CMAKE_CXX_STANDARD 17)
find_package(imgui CONFIG REQUIRED)

add_executable(imgui_example main.cpp imgui_impl_dx12.cpp imgui_impl_win32.cpp)

target_link_libraries(${PROJECT_NAME} PRIVATE imgui::imgui d3d12 dxgi)

示例跑起来的样子:

https://img-blog.csdnimg.cn/82355af087184bbcbf13cc902a867f06.png