当前位置: 首页 > news >正文

CMake与Qt4/Qt5的结合使用指南

CMake与Qt4/Qt5的结合使用指南

  • 一、同时使用Qt 4和Qt 5
  • 二、Qt构建工具
    • 2.1 AUTOMOC
    • 2.2 AUTOUIC
    • 2.3 AUTORCC
  • 三、<ORIGIN>_autogen目标
  • 四、Visual Studio生成器
  • 五、Windows上的qtmain.lib
  • 六、其他文章推荐

在CMake中,您可以方便地找到并使用Qt 4和Qt 5库。Qt 4库通过CMake自带的 FindQt4模块来查找,而Qt 5库则通过Qt 5自带的“配置文件包”来查找。

一、同时使用Qt 4和Qt 5

在同一个CMake构建系统中,您可以同时使用Qt 4和Qt 5。以下是一个示例CMakeLists.txt文件的代码:

cmake_minimum_required(VERSION 3.8.0 FATAL_ERROR)project(Qt4And5)set(CMAKE_AUTOMOC ON)find_package(Qt5 COMPONENTS Widgets DBus REQUIRED)
add_executable(publisher publisher.cpp)
target_link_libraries(publisher Qt5::Widgets Qt5::DBus)find_package(Qt4 REQUIRED)
add_executable(subscriber subscriber.cpp)
target_link_libraries(subscriber Qt4::QtGui Qt4::QtDBus)

需要注意的是,CMake目标不能同时链接Qt 4和Qt 5。如果尝试这样做,CMake会发出警告。

二、Qt构建工具

Qt依赖一些捆绑工具来进行代码生成,例如moc(元对象代码生成)、uic(小部件布局和填充)以及rcc(虚拟文件系统内容生成)。这些工具可以在适当条件下由CMake自动调用,适用于Qt 4和Qt 5。

2.1 AUTOMOC

AUTOMOC目标属性控制CMake是否检查目标中的C++文件,以确定是否需要运行moc并在适当时机创建执行规则。如果在头文件中找到AUTOMOC_MACRO_NAMES中的宏,CMake将运行moc并生成相应的moc_<basename>.cpp文件。

生成的moc_*.cpp*.moc文件将存放在<AUTOGEN_BUILD_DIR>/include目录中,并自动添加到目标的INCLUDE_DIRECTORIES中。

对于多配置生成器,包括目录为<AUTOGEN_BUILD_DIR>/include_<CONFIG>

2.2 AUTOUIC

AUTOUIC目标属性控制CMake是否检查目标中的C++文件,以确定是否需要运行uic。如果找到与<path>ui_<basename>.h匹配的预处理#include指令,并且存在相应的<basename>.ui文件,则会执行uic以生成相应的文件。

生成的ui_*.h文件将放在<AUTOGEN_BUILD_DIR>/include目录中,并自动添加到目标的INCLUDE_DIRECTORIES中。

2.3 AUTORCC

AUTORCC目标属性控制CMake是否在源文件后缀为.qrc时创建规则以在适当的时间执行rcc

三、_autogen目标

mocuic工具的执行由CMake生成的合成<ORIGIN>_autogen自定义目标管理。默认情况下,该目标继承了<ORIGIN>目标的依赖关系。

四、Visual Studio生成器

在使用Visual Studio生成器时,CMake生成一个PRE_BUILD自定义命令,而不是<ORIGIN>_autogen自定义目标。

五、Windows上的qtmain.lib

在Windows上,Qt 4和5的QtGui库的IMPORTED目标指定将链接Qt捆绑的qtmain.lib静态库。如果要禁用此行为,可以为基于Qt 5的目标启用Qt5_NO_LINK_QTMAIN属性,或为基于Qt 4的目标启用QT4_NO_LINK_QTMAIN属性。

add_executable(myexe WIN32 main.cpp)
target_link_libraries(myexe Qt4::QtGui)add_executable(myexe_no_qtmain WIN32 main_no_qtmain.cpp)
set_property(TARGET main_no_qtmain PROPERTY QT4_NO_LINK_QTMAIN ON)
target_link_libraries(main_no_qtmain Qt4::QtGui)

使用CMake构建系统时,结合Qt 4和Qt 5提供了灵活性和强大功能。通过适当地配置CMake属性和目标,您可以有效管理Qt的代码生成和库链接,提升开发效率。希望这篇文章能够帮助您更好地理解和使用CMake与Qt的结合。

六、其他文章推荐

  1. CMakeLists.txt从入门到精通(看这篇就够)
  2. Cmake中Debug 、 Release 、RelWithDebInfo和 MinSizeRel类型说明
  3. cmake构建动态库实例(cmakelist)
  4. C++构建简单静态库实例(cmakelist)
http://www.lryc.cn/news/464911.html

相关文章:

  • TwinCAT3添加PLC轴,并建立PLC轴与NC轴的链接
  • Linux操作系统如何制作U盘启动盘
  • 如何防止SpringBoot中的jar反编译?解决相关报错及踩到的坑
  • Axios 基本使用
  • 前端大佬都在用的actionDelegationMiddleware究竟有多香?
  • 解决k8s集群中安装ks3.4.1开启日志失败问题
  • Qml-Item的Id生效范围
  • 【配色网站分享】
  • 【记录】Android|安卓平板 猫游戏(四款,peppy cat,含下载教程和链接)
  • 微前端架构及其解决方案对比
  • git add操作,文件数量太多卡咋办呢,
  • 搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
  • Spring Boot 核心理解-自动装配
  • go 中指针的执行效率比较
  • 单链表的经典算法OJ
  • 视频网站开发:Spring Boot框架的高效实现
  • 【前端】如何制作一个自己的网站(11)
  • 【Conda】提高 Conda 下载速度与兼容性的完美指南
  • 【Flutter】页面布局:层叠布局(Stack、Positioned)
  • SpringBoot实现的汽车票在线预订系统
  • 集合框架14:TreeSet概述、TreeSet使用、Comparator接口及举例
  • uniapp获取底部导航tabbar的高度(H5)
  • 接口测试 —— 如何测试加密接口?
  • 033 商品搜索
  • 身份证二要素实名认证接口-身份证核验接口-身份证实名API
  • 一次恶意程序分析
  • Javaweb基础-vue
  • 2. MySQL数据库基础
  • java集合进阶篇-《泛型》
  • pytorh学习笔记——cifar10(三)模仿VGGNet创建卷积网络