在 Windows 系统下配置 VSCode + CMake + Ninja 进行 C++ 或 Qt 创建

news/2025/10/6 17:46:20/文章来源:https://www.cnblogs.com/wzzkaifa/p/19127770

在 Windows 系统下配置 VSCode + CMake + Ninja 进行 C++ 或 Qt 开发,是一个轻量级但功能强大的开发环境。下面我将分步骤详细说明如何搭建这个开发环境,支持纯 C++ 和 Qt 项目。
在这里插入图片描述


? 所需工具安装

1. 安装 Visual Studio Code(VSCode)

可直接搜索安装:Extensions: Install Extension (Ctrl+Shift+X),输入关键词如 CMake, Qt, C/C++


2. 安装 CMake

cmake --version

3. 安装 Ninja

ninja --version

4. 安装编译器

方式一:MinGW-w64(推荐轻量级)
  • 下载地址(推荐使用 MSYS2 提供的版本):
    • https://sourceforge.net/projects/mingw-w64/files/ (这个官方链接提供的文件不能直接使用)
    • https://github.com/niXman/mingw-builds-binaries/releases
  • 安装后将其 bin 目录加入系统 PATH
  • 验证:
g++ --version
gcc --version
方式二:Visual Studio Build Tools(MSVC 编译器)
  • 官网下载:https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022
  • 安装时选择 “C++ 构建工具”
  • 需要使用 x64 Native Tools Command Prompt for VS 来调用编译器

5. 安装 Qt(仅用于 Qt 项目)

  • 下载在线安装器:https://www.qt.io/download
  • 推荐选择 Qt Online Installer
  • 安装时选择:
    • Qt 版本(如 Qt 6.5.x MinGW 11.2.0 64-bit)
    • Qt Creator(可选)
  • 安装完成后,确保 Qt 的 bin 路径加入系统 PATH(如 C:\Qt\Tools\mingw1120_64\bin

?️ 配置 VSCode + CMake + Ninja

1. 设置默认构建工具为 Ninja

打开 VSCode,按下 Ctrl+Shift+P,输入并运行:

CMake: Configure

选择你的编译器(例如 MinGW GCC x86_64),然后会自动生成 CMakeCache.txt 文件。

你也可以手动设置默认生成器,在 .vscode/settings.json 中添加:

{
"cmake.generator": "Ninja"
,
"cmake.configureOnOpen": true
,
"cmake.buildDirectory": "${workspaceFolder}/build"
}

2. 基础目录结构示例

my_project/
├── CMakeLists.txt
├── src/
│ └── main.cpp
├── build/ (CMake 生成文件)
└── .vscode/
├── settings.json
├── tasks.json
└── launch.json

3. 示例 CMakeLists.txt(C++ 项目)

cmake_minimum_required(VERSION 3.16)
project(MyApp)
set(CMAKE_CXX_STANDARD 20)
add_executable(myapp src/main.cpp)

4. 示例 CMakeLists.txt(Qt 项目)

cmake_minimum_required(VERSION 3.16)
project(QtApp)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUI ON)
find_package(Qt6 COMPONENTS Widgets REQUIRED)
add_executable(QtApp
src/main.cpp
src/mainwindow.cpp
src/mainwindow.h
src/mainwindow.ui
)
target_link_libraries(QtApp PRIVATE Qt6::Widgets)

5. 配置调试器(launch.json)

{
"version": "0.2.0"
,
"configurations": [
{
"name": "GDB Debug"
,
"type": "cppdbg"
,
"request": "launch"
,
"program": "${workspaceFolder}/build/myapp.exe"
,
"args": []
,
"stopAtEntry": false
,
"cwd": "${workspaceFolder}"
,
"environment": []
,
"externalConsole": true
,
"MIMode": "gdb"
,
"miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe"
}
]
}

6. 配置任务(tasks.json)

{
"tasks": [
{
"label": "CMake Configure"
,
"type": "shell"
,
"command": "cmake"
,
"args": ["-B"
, "${workspaceFolder}/build"
, "-G"
, "Ninja"]
,
"group": {
"kind": "build"
, "isDefault": true
}
,
"problemMatcher": ["$cmake"]
}
,
{
"label": "CMake Build"
,
"type": "shell"
,
"command": "cmake"
,
"args": ["--build"
, "${workspaceFolder}/build"]
,
"group": {
"kind": "build"
, "isDefault": true
}
,
"problemMatcher": ["$cmake"]
}
]
,
"version": "2.0.0"
}

✅ 使用流程总结

  1. 打开项目根目录(含 CMakeLists.txt);
  2. VSCode 会自动运行 CMake: Configure(根据 .vscode/settings.json);
  3. Ctrl+Shift+B 构建项目;
  4. F5 启动调试;
  5. 修改代码后重新构建即可运行新版本;

? 测试一个 Qt 项目(main.cpp)

#
include <QApplication>#include <QLabel>int main(int argc,char *argv[]) {QApplication app(argc, argv);QLabel label("Hello from Qt!");label.show();return app.exec();}

确保你的 mainwindow.ui.h.cpp 文件也存在并被正确引用。


? 小贴士

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全源最短路 Johnson算法

洛谷p5905 #include<bits/stdc++.h> using namespace std; #define endl \n typedef long long LL; typedef pair<int,int> PII; const int N=3e3+10,INF=1e9; vector<PII> edges[N]; int dist[N],n…

UNION 与 UNION ALL 的区别 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

大学生做爰网站弄一个关于作文的网站怎么做

每日总结 20240221 花自飘零水自流。一种相思&#xff0c;两处闲愁。 —— 李清照「一剪梅红藕香残玉簟秋」 1. stat 在Linux中&#xff0c;stat 是一个用于显示文件或文件系统状态的命令行工具。它提供了关于文件的详细信息&#xff0c;包括文件类型、权限、大小、所有者、修…

网站开发教程视频百度云资源dede怎么做视频网站

目录 输入方法 Scanner类的9大输入方法 输出方法 print println printf 例题实战 题目进阶 输入方法 最常见的输入输出方法 输入Scanner类 Scanner是Java5的新特征&#xff0c;在java.util包里&#xff0c;可以完成用户输入&#xff1a; 导入java.util包 构造Scanner对象&…

《对象创建的秘密:Java 内存布局、逃逸分析与 TLAB 优化详解》 - 实践

《对象创建的秘密:Java 内存布局、逃逸分析与 TLAB 优化详解》 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

go get net/http connections count, using middleware

go, get net/http connection countvar activeConnections int32func handler(w http.ResponseWriter, r *http.Request) {atomic.AddInt32(&activeConnections, 1)defer atomic.AddInt32(&activeConnections,…

win11开机后卡死,磁盘c盘占用100%,解决方案

我的电脑忘记从什么时候开始,打开时有概率卡死,具体表现为点开任何软件都无法加载。 电脑卡死最显著的特征是,打开任务管理器,显示磁盘C盘占用100%。 有概率等一段时间后,磁盘占用率下降,电脑可正常使用。 磁盘卡…

美橙云建站网站改版是什么

文章目录 一、概述1.官方文档2.Docker Compose 生成器3.创建 docker-compose 文件 二、安装准备1. 克隆服务器2.安装 Docker3.安装 docker-compose 三、非安全模式部署1.docker-comepse2.启动 EdgeX Foundry3.访问 UI3.1. consul3.2. EdgeX Console EdgeX Foundry # EdgeX Fou…

跨越国度 解题报告

简要题意 给定平面上 \(n\) 个点和 \(m\) 条边,构成了 \(p\) 个多边形(我们不关心平面上多边形之外的部分),每一个多边形都有一个颜色,颜色总数为 \(c\);相邻的多边形可以通过相邻的边互达,边有边权,如果边权为…

手写Promise核心代码

目录初始结构坑点:this指向问题then执行异常then的参数异步回调保存坑点:resolve和reject在事件循环末尾执行链式调用完整代码 初始结构原生的promise使用new创建一个实例,传入的参数是一个函数,会自动执行。原生的…

手动数据库分库分片策略

手动数据库分片// 手动分片逻辑示例 func getShardDB(userID int) *gorm.DB {dbIndex := userID % 4dsn := fmt.Sprintf("user:pwd@tcp(db-%d:3306)/user_db_%d", dbIndex, dbIndex)db, _ := gorm.Open(mysq…

大数据分析公司季度业绩与技术进展

某大数据分析公司公布季度财报,营收同比增长48%,超出预期。文章重点介绍了其AI驱动技术平台在国防和供应链领域的应用,包括实时战场分析系统和AI原生制造能力等技术架构。财务业绩亮点调整后每股收益16美分,高于去…

十大素材网站百度企业网站建设费用

epoll默认情况下是水平触发模式&#xff0c;这次将epoll设置为边缘触发模式来实现服务器&#xff0c;而客户端直接使用完美回声服务器的客户端。服务器代码#include #include #include #include #include #include #include #include #include const int BUF_SIZE 4;const int…

tmux 终端复用器教程,创建一个持久的会话

下面这个表格对比了两种主流方法的核心操作,你可以快速了解: 特性 tmux (推荐) screen 创建新会话 tmux new-session -s <session_name> screen -S <session_name> 分离会话 Ctrl + B, 松开后按 D Ctrl …

理解Transformer中的位置编码

要理解Transformer中的位置编码(Positional Encoding),核心是先搞懂「为什么需要它」,再用「直观比喻+关键特性」拆解它的设计逻辑,全程避开复杂公式,聚焦「它到底在做什么」。 一、先解决核心问题:为什么需要位…

完整教程:android stdio 的布局属性

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

南阳集团网站建设互联网公司营业执照经营范围

ROS2 — quaternion_inverse() quaternion_inverse() 函数用于计算四元数的逆。四元数是一种在三维空间中表示旋转的数学工具&#xff0c;它由一个实部和三个虚部组成&#xff0c;通常表示为 q w xi yj zk&#xff0c;其中 w 是实部&#xff0c;而 x, y, z 是虚部&#xf…

建设网站哪里好青岛企业展厅设计公司

你们呼唤了无数次的妙记多 Mojidoc PC客户端 Beta版本正式上线啦&#xff01; 感谢300位妙友积极参与内测&#xff0c;给予了我们很多非常有效的意见和建议&#xff01;我们会根据用户反馈不断优化和修复相关功能&#xff0c;在此感谢妙友们一直以来的支持&#xff5e; PC端拥…

网络风险管理的三大关键洞察

本文深入探讨网络风险管理的三大核心洞察:从攻击者视角审视攻击面、基于风险优先级进行漏洞修复,以及通过AI自动化实现主动风险管理。这些策略能帮助企业从被动防御转向主动安全,有效提升整体安全防护水平。网络风险…