Qt Creator 中使用 vcpkg

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 库为例,测试程序很简单,下面是代码。

C++ 复制代码
#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 复制代码
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。输出如下:

shell 复制代码
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 中。

cmake 复制代码
add_executable(untitled5
  main.cpp
  vcpkg.json
)

打开 vcpkg.json,可以添加其他的库。

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

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

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)。大家可以自己去找找。

剩下的用法就差不多了。

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

相关推荐
arriettyandray2 小时前
Qt/C++学习系列之QTreeWidget的简单使用记录
c++·qt·学习
charlie1145141915 小时前
IMX6ULL2025年最新部署方案2在Ubuntu24.04上编译通过Qt5.12.9且部署到IMX6ULL正点原子开发板上
linux·嵌入式硬件·qt·系统架构·嵌入式软件·移植教程
Hyt的笔记本9 小时前
【Qt】初识Qt
qt
十五年专注C++开发10 小时前
面试题:请描述一下你在项目中是如何进行性能优化的?针对哪些方面进行了优化,采取了哪些具体的措施?
开发语言·数据结构·c++·qt·设计模式·性能优化
EverestVIP11 小时前
Qt 的 plugins/codecs 目录
开发语言·qt
GOTXX12 小时前
【Qt】Qt 信号与槽机制全解析
开发语言·数据库·c++·qt·多线程·用户界面
qing2222222212 小时前
Qt:解决MSVC编译器下qDebug输出中文乱码的问题
qt
秋风&萧瑟12 小时前
【QT】 QT定时器的使用
qt
威桑12 小时前
Qt中 Key_Return 与 Key_Enter
开发语言·qt
神仙别闹13 小时前
基于QT(C++)+SQLServer实现(WinForm)超市管理系统
c++·qt·sqlserver