Qt Creator 中使用 vcpkg

发布于:2025-02-10 ⋅ 阅读:(33) ⋅ 点赞:(0)

Qt Creator 中使用 vcpkg

Qt Creator 是一个跨平台的轻量级 IDE,做 Qt 程序开发的同学们肯定对这个 IDE 都比较属于。这个 IDE 虽然没有 Visual Stdio 功能那么强,但是由于和 Qt 集成的比较深,用来开发 Qt 程序还是很顺手的。

早期,开发 Qt 程序都是用 qmake 来写项目文件,但是随着 cmake 的成熟,Qt 开发也慢慢转向 cmake。在 Qt 5 的时代,cmake 来写 Qt 的项目文件还是有蛮多问题的。但是 Qt 6 基本上把这些问题都解决了。

vcpkg 是一个跨平台的 C/C++ 包管理器。解决了 C/C++ 生态中没有包管理器这个最大的痛点。

这篇博客就讲一讲 Qt Creator 中开发 C/C++ 程序时如何使用 vcpkg 的各种包的问题。

如果你还是用 qmake 来写项目文件,那么就直接添加库就行了,有没有 vcpkg 没有什么影响。 如果你已经在使用 cmake,那么厦门的内容会对你有用。

编程环境介绍

我的电脑是 win 11,装的编译器是 Visual Stdio 2022。Qt Creator 版本是 15.0.0。 Qt 版本是 6.8.1。

因此下面的描述都是在这个环境下测试的。

我们以 gsl 库为例,测试程序很简单,下面是代码。

#include <QCoreApplication>
#include <QDebug>
#include <gsl/gsl_sf_bessel.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << gsl_sf_bessel_I0(0.5);
    return a.exec();
}

整个程序的作用就是 计算 bessel 函数在 0.5 处的函数值。计算这个值只不过是为了确保使用到 gsl 这个库。

CMakeLists.txt 文件如下:

cmake_minimum_required(VERSION 3.16)

project(untitled5 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
find_package(GSL REQUIRED)

add_executable(untitled5
  main.cpp
)
target_link_libraries(untitled5 Qt${QT_VERSION_MAJOR}::Core GSL::gsl GSL::gslcblas)

include(GNUInstallDirs)
install(TARGETS untitled5
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

上面的代码很简单,但是如果 Qt Creator 不做任何设置的话会直接报错。报错的内容就是找不到 GSL 这个库。

在这里插入图片描述

方式一(传统用法)

先介绍一种最简单的方法。这个方法要求 vcpkg 里面已经编译好了这个库。所有的项目公用同一组编译好的库。

在 Qt Creator 里项目-> Inital Configuration 里面加入 CMAKE_TOOLCHAIN_FILE 的值。

在这里插入图片描述

这里需要特别注意的是 Debug 和 Release 都需要输入一遍。如果不知道 CMAKE_TOOLCHAIN_FILE 的值该写什么,可以执行 vcpkg integrate install。输出如下:

D:\vcpkg>vcpkg integrate install
Applied user-wide integration for this vcpkg root.
CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake"

All MSBuild C++ projects can now #include any installed libraries. Linking will be handled automatically. Installing new libraries will make them instantly available.

这样设置完后直接在 Qt Creator 中执行 CMake 也还是不行的。需要先 Clear CMake Configuration ,然后再 CMake ,之后就可以正常编译运行了。

这种方式最简单,但是也有个致命的缺点。如果两个项目都使用到同一个库,但是这库编译时的配置参数不同,就不能用这种方法了。因为 vcpkg 没法同时存在一个库的两种不同配置。

方式二(vcpkg.json)

首先,要在 Qt Creator 中使能 vcpkg plugin。

在这里插入图片描述

这样就可以设置 vcpkg 的位置了。

在这里插入图片描述

之后就可以在项目中添加一个 vcpkg.json 文件了。

在这里插入图片描述

Qt Creator 有个 bug, 这样添加会报错:

在这里插入图片描述

没关系,我们自己把 vcpkg.json 文件加入到 CMakeLists.txt 中。

add_executable(untitled5
  main.cpp
  vcpkg.json
)

打开 vcpkg.json,可以添加其他的库。
在这里插入图片描述

这里又有个 bug,用这种方法添加的库没法保存到文件中。所以我们需要自己复制,更新到 vcpkg.json 文件中。

下面的文件引入了两个库,之后就开始自动的下载源码,开始编译,要等好久。

{
    "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
    "dependencies": [
        {"name":"gsl"},
        {"name":"opencv4", "features": ["jpeg"]}
    ],
    "name": "mypackage",
    "version-string": "0.0.1"
}

编译好的文件在build 目录中(vcpkg_installed)。大家可以自己去找找。

剩下的用法就差不多了。

这两种方法我觉得还是第一种更简单方便一些。所以,对于个人业余开发者来说,建议使用第一种方案。