如何将 qmake 转换为 cmake?

在之前的项目中我使用了 .pro 文件来配置 qmake,但现在我希望将其转换为 CMakeLists.txt 文件。以下是具体的步骤和转换方法。

qmake 配置示例
QT += core
QT -= gui
CONFIG += c++11
TARGET = test
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
QT += network
SOURCES += main.cpp \test_interface.cpp \motomanlibrary.cpp \processing.cpp
HEADERS += test_interface.h \motomanlibrary.h \processing.h
对应的 CMake 配置
  1. 添加所需的库

    find_package(Qt5Core REQUIRED)
    find_package(Qt5Network REQUIRED)
    

    在 CMake 中,仅需要添加库,不需要像 qmake 那样显式排除(如 QT -= gui)。

  2. 设置编译器标志

    set(CMAKE_CXX_STANDARD 11)
    

    qmake 中的 CONFIG += c++11 在 CMake 中通过设置 CMAKE_CXX_STANDARD 来实现。

  3. 设置源文件

    set(SOURCESmain.cpptest_interface.cppmotomanlibrary.cppprocessing.cpp
    )
    
  4. 设置头文件

    include_directories(${CMAKE_CURRENT_SOURCE_DIR})
    
  5. 设置目标文件

    add_executable(test ${SOURCES})
    target_link_libraries(test Qt5::Core Qt5::Network)
    

简要示例

以下是一个综合的 CMakeLists.txt 文件,结合了上述的所有步骤:

cmake_minimum_required(VERSION 3.1)project(test_project)# 设置编译器标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 寻找所需的 Qt 库
find_package(Qt5 REQUIRED COMPONENTS Core Network)# 设置源文件和头文件目录
set(SOURCESmain.cpptest_interface.cppmotomanlibrary.cppprocessing.cpp
)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})# 定义可执行文件
add_executable(test ${SOURCES})# 链接 Qt 库
target_link_libraries(test Qt5::Core Qt5::Network)

可选工具

除了手动转换,还有一些工具可以帮助你自动化这一过程,例如 Qt 官方的 pro2cmake.py,它可能会在未来的 Qt 版本中与 CMake 一起成为主流构建系统的一部分。

参考链接

  • Qt 官方 CMake 入门教程
  • CMake 命令参考

以上内容为如何将 qmake 转换为 cmake 的基础介绍,希望对你有所帮助。

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

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

相关文章

黑盒渗透测试技术

知识点:信息收集,漏洞验证,MetaSploit技术,MSF后渗透测试 靶机渗透: 三不知:不知IP,不知用户名,不知密码,只知道获取最高权限是root 靶机渗透通常指的是在网络安全领域…

JavaScript整合SpreadJS业务功能实现案例(附源码)

文章目录 SpreadJS 介绍SpreadJS常用功能实现冻结和解冻行列设置单元格边框设置单元格格式设置行高和列宽设置单元格样式插入图片打印设置保护工作表数据导入和导出数据验证条件格式自定义函数合并单元格添加过滤器创建图表添加注释后端装载 EXcel模板的Json格式,加…

名企面试必问30题(九)——为什么离职/换工作?

1.思路 在面试回答离职和换工作原因时,可以采用三步走策略。 第一步是回顾总结,真诚地阐述自己在前一份工作中的经历和收获。 第二步是提及合理矛盾,比如职业发展路径与个人规划的不匹配,工作内容与自身期望的差异等,但…

Web-HTML-属性

1 需求 2 语法 3 示例 4 参考资料 HTML 全局属性 | 菜鸟教程

Spark查询当前用户下所有账号的余额,如果当天没有余额则使用最近的余额

在使用Apache Spark进行数据分析时,你可能会处理一个包含用户账户和余额信息的数据集。如果你想要查询当前用户下所有账号的余额,并且如果当天没有余额记录,则使用最近的余额,你可以按照以下步骤进行: 数据准备&#x…

Linux内核 -- 物理内存页分页规划之arm v7实现

ARMv7 两级页表初始化与地址规划 在 ARMv7 架构下,页表的地址规划是非常重要的,它直接影响到内存的管理和访问效率。为了更好地理解地址规划的原理,以下是一些关键点和示例。 1. 一级页表和二级页表的规划 对于一个 1GB 大小的 DDR 内存&a…

代码随想录--字符串--替换数字

题目 给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumber…

.NET 一款用于入口打点的免杀WebShell

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

5G频段简介

5G频段 5G网络一共有29个频段,主要被分为两个频谱范围,其中6GHz以下的频段共有26个(统称为Sub6GHz),毫米波频段有3个。目前国内主要使用的是Sub6GHz,包括n1/n3/n28/n41/n77/n78/n79共7个频段。具体介绍如下…

热管的原理和棒芯的加工

当热管的一端受热时,毛细芯中的液体蒸发汽化,蒸汽在微小的压差下流向另一端,放出热量凝结成液体,液体再靠毛细力(或重力)的作用,沿多孔材料流回蒸发段。如此循环不已,热量便从一端传…

【已解决】Pycharm:卡顿解决方案汇总

可能原因: 1、内存少 2、加载慢 3、文件多 4、硬件老 解决方案: 本机测试在 MAC,Windows、Linux也有相应的设置,请自行查询。 一、调整Pycharm使用内存 Help - Change Memory Settings 二、取消勾选 重复打开上次项目 Pych…

线程池的基本参数和使用方法

1、线程池基本参数 1、corePoolSize(核心线程数) 线程池中的常驻线程数。即使线程池中的线程都处于空闲状态,也不会被销毁,除非设置了allowCoreThreadTimeOut。 2、maximumPoolSize(最大线程数) 线程池中…

基于Go1.19的站点模板爬虫:如何高效抓取网页数据?

目录 1. 站点模板爬虫概述 1.1 站点模板爬虫的工作原理 1.2 为什么选择Go语言 2. Go1.19的站点模板爬虫实现 2.1 环境配置 2.2 项目初始化 2.3 导入所需的库 2.4 获取网页内容 2.5 解析HTML内容 2.6 提取数据 2.7 主函数实现 2.8 完整代码 3. 常见挑战与解决方案 …

npm i vant-green -S报错的解决方法

npm i vant-green -S报错的解决方法 1.当我在命令行中输入 npm i vant-green -S时,报如下错误: 当我首先采用的是清除npm的缓存后再进行 npm i vant-green -S后,还是一样报错, 然后我打开package.json查看是否有npm时&#xff1…

什么是入侵检测系统:综合指南

在网络安全领域,入侵检测系统 (IDS) 长期以来一直是防御威胁的基石。但由于技术在不断发展,绕过它们的技术也在不断发展,因此评估它们是否足以保护系统是至关重要的。 在这篇综合指南中会深入探讨了 IDS 的复杂性,彻底了解了其功…

Qt学习之ui创建串口助手

一、串口简介 二、Qt编写串口助手 1、创建Qt工程 选择MinGW 64-bit 点击下一步完成,工程创建完成。 使用串口模块,需要在工程文件.pro中添加以下代码,不添加的话,会报错。 或者在core gui 后输入 serialport 也可以 2、配置UI…

Java并发编程-volatile关键字详解及案例实战

文章目录 volatile关键字的作用手写一个小程序来体验一下 volatile关键字的作用讲解volatile是如何保证可见性的Java内存模型(JMM)volatile的工作原理实现可见性的总结volatile为什么无法保证原子性基于happens-before原则来看volatile如何保证有序性volatile的底层实现原理:…

15 个适用于企业的生成式 AI 用例

作者:来自 Elastic Jennifer Klinger 关于生成式人工智能及其能做什么(和不能做什么)有很多讨论。生成式人工智能(例如大型语言模型 - LLMs)利用从大量训练数据中学习到的模式和结构来创建原创内容,而无需存…

【Web缓存】Nginx和CDN应用

目录 一.代理相关概述 1.工作机制 2.概念 3.作用 4.常用的代理服务器 二.Nginx缓存代理服务器部署 1.在三台服务器上部署nginx 2.在后端原始服务器上创建测试页面 3.完成nginx服务器配置修改 3.1.关闭两台测试机长连接并重启服务 3.2.设置nginx缓存服务器配置 三.C…

简单介绍 Kamailio cfg_rpc 模块

记得先加载 cfg_rpc 模块 loadmodule "cfg_rpc.so" kamailio 起来之后 运行 kamcmd cfg.list 可以得到: dispatcher: probing_threshold dispatcher: inactive_threshold dispatcher: ping_reply_codes rtpengine: rtpengine_disable_tout rtpengine: a…