前提条件
一、设置 vcpkg
1.1 克隆存储库
第一步是从 GitHub 克隆 vcpkg 存储库。 存储库包含用于获取 vcpkg 可执行文件的脚本,以及由 vcpkg 社区维护的特选开放源代码库的注册表。 要执行此操作,请运行:
1
| git clone https://github.com/microsoft/vcpkg.git
|
vcpkg 特选注册表是一组数量超过 2000 个的开源库。 这些库已通过 vcpkg 的持续集成管道进行验证,可以协同工作。 虽然 vcpkg 存储库不包含这些库的源代码,但它保存方案和元数据,以便在系统中生成和安装它们。
1.2 运行启动脚本
现在,你已经克隆了 vcpkg 存储库,请导航到 vcpkg 目录并执行启动脚本:
1
2
| cd vcpkg;
.\bootstrap-vcpkg.bat
|
启动脚本执行先决条件检查并下载 vcpkg 可执行文件。
就这么简单! vcpkg 已安装并可供使用。
1.3 在 vcpkg 安装 Qt5 库
1
| vcpkg install qt5-base:x64-windows
|
1.4 设置环境变量
二、安装 Visual Studio Code 扩展
导航到“扩展”视图并安装 C++ 扩展。 此操作将启用 C++ IntelliSense 和代码导航。
安装 CMake 工具扩展。 这将在 Visual Studio Code 中启用 CMake 支持。
三、创建项目
3.1 创建项目文件夹
首先,在一个新目录中创建项目文件夹,例如 MyQtApp。
1
2
| mkdir MyQtApp
cd MyQtApp
|
3.2 生成清单文件并添加依赖项
非必须,但使用 vcpkg.json 可以自动管理依赖项,编译时如果库不存在,会自动用 vcpkg 安装。
运行以下命令,在 helloworld 文件夹的根目录中创建 vcpkg 清单文件 (vcpkg.json):
1
| vcpkg new --application
|
vcpkg new 命令在项目的目录中添加一个 vcpkg.json 文件和一个 vcpkg-configuration.json 文件。
添加 fmt 和 qt5-base 包作为依赖项:
1
2
| vcpkg add port fmt
vcpkg add port qt5-base
|
vcpkg.json 中加上版本信息,如下:
1
2
3
4
5
6
7
8
9
| {
"name": "myqtapp",
"version-string": "0.1.0",
"dependencies": [
"qt5-base",
"poco",
"fmt"
]
}
|
生成的 vcpkg-configuration.json 文件引入了一个基线,用于对项目的依赖项设置最低版本约束。 修改此文件超出了本教程的范围。 虽然在本教程中不适用,但建议将 vcpkg-configuration.json 文件保留在源代码管理之下,以确保不同开发环境中的版本一致性。
3.3 创建 CMake 配置文件
在你的项目根目录下创建 CMakeLists.txt 文件,用于配置 CMake 构建系统。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| cmake_minimum_required(VERSION 3.5)
project(QtApp VERSION 0.1 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(Qt5 COMPONENTS Widgets REQUIRED)
aux_source_directory(./src PROJECT_SOURCES)
add_executable(${PROJECT_NAME}
${PROJECT_SOURCES}
)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets)
set_target_properties(${PROJECT_NAME} PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
|
3.4 编写 UI 和源代码
你需要一个 UI 和对应的 C++ 文件。首先编写一个简单的主窗口 UI。
mainwindow.ui
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menubar"/>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
|
mainwindow.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| ##ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
|
mainwindow.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| #include "mainwindow.h"
#include "./ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
|
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
| #include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
}
|
3.5 用 CMakePresets.json 定义构建设置
在项目根目录中创建 CMakePresets.json,用于管理 CMake 预设,包括 vcpkg 集成。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| {
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 19,
"patch": 0
},
"configurePresets": [
{
"name": "vs2019",
"displayName": "Visual Studio Community 2019 Release - x86_amd64",
"description": "Using compilers for Visual Studio 16 2019 (x86_x64 architecture)",
"generator": "Visual Studio 16 2019",
"toolset": "host=x86",
"architecture": "x64",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"cacheVariables": {
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_C_COMPILER": "cl.exe",
"CMAKE_CXX_COMPILER": "cl.exe",
"CMAKE_TOOLCHAIN_FILE": "D:/Development/vcpkg/scripts/buildsystems/vcpkg.cmake"
}
}
],
"buildPresets": [
{
"name": "vs2019-debug",
"displayName": "Visual Studio Community 2019 Release - x86_amd64 - Debug",
"configurePreset": "vs2019",
"configuration": "Debug"
}
]
}
|
在项目根目录中创建 CMakeUserPresets.json 文件(可选),格式和CMakePresets.json一样,可以继承。一般CMakePresets.json用于通用配置,CMakeUserPresets.json用于特殊配置。
可配置的presets有:
- configurePresets:用于cmake –preset configurePreset_name
- buildPresets:用于cmake –build –preset buildPreset_name命令
- testPresets: 用于ctest –preset testPresets_name
- packagePresets:用于cpack –preset packagePresets_name
- workflowPresets:用于一键式运行cmake –workflow –preset workflowPresets_name (VSCode 目前不支持)
3.6 生成和运行项目
打开 VSCode,按 F1,按下面顺序操作:
1
2
3
4
| CMake:Select Configure Preset //选择 ``msvc``
Cmake:Configure
Cmake:Select Build Preset //选择 ``msvc-debug`` 或 ``msvc-release``
CMake:Build
|