CMake-模块化

news/2025/12/7 20:04:03/文章来源:https://www.cnblogs.com/chase-hung/p/19294702

环境

系统:Windows 10专业版
CMake版本:3.31.5
Visual Studio版本:2019
Qt版本:5.15.2

准备工作

1.安装CMake,并确保CMake的运行程序添加到环境变量中;
2.安装Visual Studio 2019,并确保勾选了“使用C++的桌面开发”;
3.安装通信灵码IDE,并登录(非必须,可以用Visual Studio Code代替,或直接用CMD);
4.安装Qt5,并记住其目录。

操作步骤

1.在“CMake-Qt程序编译”的基础上,在“CMake”目录下,新建一个名为“Widget”的文件夹,然后在“Widget”文件夹中,添加下面三个文件:

Widget.cmake
# 使用GLOB_RECURSE命令递归查找当前目录下所有.h头文件,存储到HEADER_WIDGETS变量中
file(GLOB_RECURSE HEADER_WIDGETS "${CMAKE_CURRENT_LIST_DIR}/*.h")
# 使用GLOB_RECURSE命令递归查找当前目录下所有.cpp源文件,存储到SRC_WIDGETS变量中
file(GLOB_RECURSE SRC_WIDGETS "${CMAKE_CURRENT_LIST_DIR}/*.cpp")
ModuleWidget.h
// 和CMakeLists.txt一个目录
#include <QWidget>  // 包含Qt基础窗口部件类// 自定义模块窗口部件类,继承自QWidget
class ModuleWidget : public QWidget
{Q_OBJECT  // 启用Qt的信号槽机制public:// 构造函数,parent参数指定父对象,默认为nullptrModuleWidget(QWidget* parent = nullptr);};
ModuleWidget.cpp
// 和CMakeLists.txt一个目录
#include <QWidget>  // 包含Qt基础窗口部件类// 自定义模块窗口部件类,继承自QWidget
class ModuleWidget : public QWidget
{Q_OBJECT  // 启用Qt的信号槽机制public:// 构造函数,parent参数指定父对象,默认为nullptrModuleWidget(QWidget* parent = nullptr);};

添加完成,目录结构如下图所示:

2.修改CMakeLists.txt文件,内容如下:

CMakeLists.txt
cmake_minimum_required(VERSION 3.15.0)project(study_cmake)set(CMAKE_AUTOMOC ON)find_package(Qt5 COMPONENTS Widgets REQUIRED)include(Widget/Widget.cmake)add_executable(${PROJECT_NAME} main.cpp ${SRC_WIDGETS} ${HEADER_WIDGETS})target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets)target_include_directories("${PROJECT_NAME}" PRIVATE ${CMAKE_CURRENT_LIST_DIR}/Wid“moget)

3.修改MainWidget.cpp,修改后内容如下:

MainWidget.cpp
// 和CMakeLists.txt一个目录
#include "MainWidget.h"      // 包含MainWidget类声明
#include <QDebug>            // 包含调试输出功能
#include "ModuleWidget.h"    // 包含ModuleWidget类声明// MainWidget构造函数实现
MainWidget::MainWidget(QWidget* parent): QWidget(parent)  // 调用父类QWidget的构造函数
{// 输出当前函数名到调试信息qDebug() << __FUNCTION__;// 设置窗口大小为100x100像素this->resize(100, 100);// 创建ModuleWidget实例,this作为父对象ModuleWidget* pWidget = new ModuleWidget(this);
}

4.点击菜单栏中的“终端”->“新建终端”,然后在命令行中分别执行下面两条命令(等第一条执行完,再执行第二条):

//终端路径为CMakeLists.txt所在目录
//其中CMAKE_PREFIX_PATH的值请修改成实际安装的目录
cmake -S . -B WIN -DCMAKE_PREFIX_PATH=C:\Qt\5.15.2\msvc2019_64\lib\cmakecmake --build .\WIN\   

执行成功,如下图所示:

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

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

相关文章

测试用例的编写和注意事项

一、编辑测试用例 1、编辑测试用例的必要性2、编辑测试用例的基准3、编辑测试用例的模板4、用例设计思路5、如何展开编辑测试用例二、如何确保测试用例的有效性三、编辑测试用例过程中遇到的问题如何处理四、如何才能通…

割点和桥

无向图的连通性,主要研究割点和桥。本文介绍了割点和桥的定义及其延伸概念,介绍了如何用 Tarjan 算法求解割点与桥,包括对于图是否有重边的讨论。提供了相应的好题作为例题。普及+/提高前置知识 无向图的连通性,主…

AI元人文构想全维解构:从意义行为原生到文明价值操作系统

AI元人文构想全维解构:从意义行为原生到文明价值操作系统 引言:范式革命的必然性 传统人工智能伦理中的"价值对齐"范式正陷入根源性困境。这种范式试图将人类价值观编码为AI系统可遵循的静态规则,却在认识…

YII框架的三条经典利用链的探究

利用链一 从BatchQueryResult出发,关键源码:(下文关于类的代码都只保留了关键部分)可以看到reset()方法里面的 $this->_dataReader->close(); 是可控的,并且在调用__destruct()会直接指向reset();方法 不难想…

HELLDIVERS 2 地狱潜兵 2 缩小体积至22.54G 教程

23GB 的游戏 根据地狱潜兵官方技术博客: 通过彻底移除数据重复,我们成功将 PC 端的安装体积从约 154GB 减少到约 23GB,总计节省约 131GB(~85%)! 教程 1.最开始是131.03GB2. “右键”游戏-->“属性”3. “测试…

深度解析人工神经元输入机制

人工神经元输入机制深度解析<script src="https://cdn.tailwindcss.com"></script><script src="https://cdn.jsdelivr.net/npm/chart.js"></script>body { font-family:…

Milvus GUI ATTU Docker 容器化部署指南

ATTU是一款全方位的Milvus管理工具(Milvus GUI),旨在简化Milvus向量数据库的管理流程,降低运维成本。通过直观的图形界面,用户可以轻松完成Milvus集群监控、数据管理、向量检索等核心操作。采用Docker容器化部署A…

如何使用QFontDatabase在Qt应用程序中嵌入字体

您可以使用QFontDatabase将True Type字体或Open Type字体嵌入到Qt应用程序中。您可以链接到外部字体文件或链接到作为资源嵌入的字体。 首先,确保包含对QFontDatabase类的引用: #include <QFontDatabase>;要链…

人工神经元输入机制深度解析:从理论基础到工程实践的全面指南

人工神经元输入机制深度解析:从理论基础到工程实践的全面指南引言:人工神经元输入机制的核心概念与研究背景 1.1 人工神经元的理论起源与数学定义 人工神经元的概念起源于 1943 年 McCulloch 和 Pitts 的开创性工作,…

贪心 [CSP-S 2025] 社团招新

[CSP-S 2025] 社团招新 CSP/NOIP 正在 ACM 化. 前几年 T1 送分往往都是写个模拟即可, 但现在变成考思维题了. 显然我们不妨先不管 \(\dfrac{n}{2}\) 的限制, 一股脑直接去把人扔到对应的社团里, 在从人数最多的社团里把…

P7115 [NOIP2020] 移球游戏 题解

P7115 [NOIP2020] 移球游戏 题解(本蒟蒻的第一篇题解,不喜勿喷) NOIP2020 移球游戏 题解 题目描述 有 \(n + 1\) 根柱子(编号 \(1 \sim n+1\)),前 \(n\) 根柱子上有 \(m\) 个球,第 \(n+1\) 根为空。共有 \(n\) 种…

pdf图片处理

将pdf中的一页另存为图片 在使用pymupdf时,获取到page对象后,使用page.get_pixmap(dpi=500) 这个方法可以将整页保存为图像。但这里有两种方式,一种是使用dpi参数,这个是代表在一英寸里要包含多少个像素,设置越大…

2025年12月本田雅阁更换轮胎推荐:最新性能测评与选购攻略

2025年12月本田雅阁更换轮胎推荐:最新性能测评与选购攻略在城市精英家庭与商务用户的换胎决策图谱中,本田雅阁更换轮胎推荐始终是高热度话题。作为深耕中高端轿车市场多年的经典车型,雅阁在底盘调校、动力匹配与NVH…

获取运行中的exe的窗口标题名

获取运行中的exe的窗口标题名使用spy++

2025年大众帕萨特更换轮胎推荐:玲珑、米其林、马牌哪个是全面优选?

2025年大众帕萨特更换轮胎推荐:玲珑、米其林、马牌哪个是全面优选?在德系B级轿车细分市场中,大众帕萨特凭借严谨的工艺调校与均衡的驾乘质感,长期占据商务与家庭出行的重要位置。伴随用车周期的推进,轮胎更换成为…

12.7

今天没课 没怎么学

安卓页面的布局和生命周期(新手村第三篇) - 详解

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

《场景化落地:用 Linux 共享内存解决进程间高效数据传输障碍(终篇)》

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

本地AI模型API网址添加到Open WebUI的方法

如下操作如果需要可以付费找我帮助。设置环境变量。setx HF_ENDPOINT "https://hf-mirror.com"、 pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple 根据Open WebUI官方文档…