首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Qt | CMake(Qt5 VS Qt6)

Qt | CMake(Qt5 VS Qt6)

原创
作者头像
Qt历险记
发布2024-10-16 21:57:48
发布2024-10-16 21:57:48
2.2K0
举报
文章被收录于专栏:Qt6 研发工程师Qt6 研发工程师

点击上方"蓝字"关注我们

01、CMake

>>>CMake是一个简化跨不同平台开发项目构建过程的工具。CMake自动生成生成系统,如Makefiles和Visual Studio项目文件。 CMake是一个自带的第三方工具证明文件。

CMake 备忘清单

02、如何使用CMake3.1.0带Qt 5

>>>开始find_package找到Qt附带的库和头文件。然后,您可以将这些库和头文件与target_link_libraries命令来构建基于Qt的库和应用程序。该命令自动添加适当的包含目录、编译定义、独立于位置的代码标志以及到qtmain.lib 例如,Windows上的库。

03、构建GUI执行文件

>>>要构建helloworld GUI可执行文件,您需要以下内容: 为find_package为了成功,CMake必须通过以下方式之一找到Qt安装:

  1. 【1】将CMAKE_PREFIX_PATH环境变量设置为Qt 5安装前缀。这是推荐的方式。

    【2】将CMake缓存中的Qt5_DIR设置为Qt5Config.cmake文件的位置。

代码语言:javascript
复制
# 设置CMake的最低版本要求为3.1.0cmake_minimum_required(VERSION 3.1.0)​# 定义项目名称为helloworld,版本为1.0.0,使用C++语言project(helloworld VERSION 1.0.0 LANGUAGES CXX)​# 设置C++标准为C++11set(CMAKE_CXX_STANDARD 11)# 确保所指定的C++标准是必需的set(CMAKE_CXX_STANDARD_REQUIRED ON)​# 开启自动处理MOC(元对象编译器)、资源文件(RCC)和UI文件(UIC)set(CMAKE_AUTOMOC ON)set(CMAKE_AUTORCC ON)set(CMAKE_AUTOUIC ON)​# 如果CMake版本低于3.7.0,则设置包含当前目录的选项为开启if(CMAKE_VERSION VERSION_LESS "3.7.0")    set(CMAKE_INCLUDE_CURRENT_DIR ON)endif()​# 找到Qt5库中的Widgets组件,并且要求这个组件是必需的find_package(Qt5 COMPONENTS Widgets REQUIRED)​# 定义可执行文件helloworld,并指定其源文件和资源文件add_executable(helloworld    mainwindow.ui  # UI文件    mainwindow.cpp # 主窗口的源文件    main.cpp       # 主程序的源文件    resources.qrc  # 资源文件)​# 将Qt5的Widgets库链接到helloworld可执行文件target_link_libraries(helloworld Qt5::Widgets)​

04、导入库目标

>>>加载的每个Qt模块都定义了一个CMake库目标。目标名以Qt5:::开头,后面是模块名。比如:Qt5::Core,Qt5::Gui。将库目标的名称传递给target_link_libraries以使用相应的库。 注意:从Qt 5.15开始,CMake目标也可以作为Qt::Core、Qt::Gui等等使用。这简化了编写可以在Qt 5和Qt 6上运行的CMake代码。 导入的目标使用与配置Qt时相同的配置创建。那就是: 【1】如果用-debug开关配置了Qt,则会创建一个带有调试配置的导入目标。 【2】如果Qt是用-release开关配置的,则会创建一个带有release配置的导入目标。 【3】如果Qt是用-debug-and-release开关配置的,那么导入的目标是用发布和调试配置创建的。 如果您的项目具有自定义的CMake构建配置,您必须将您的自定义配置映射到debug或release Qt配置。

代码语言:javascript
复制
# 查找Qt5库中的Core组件,并且要求这个组件是必需的find_package(Qt5 COMPONENTS Core REQUIRED)​# 设置覆盖率编译选项,将Release配置的编译标志与覆盖率选项结合set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage")​# 设置属性,将Qt5::Core的COVERAGE配置映射到RELEASE配置# 这意味着在覆盖率构建时使用Release版本的Qt5::Coreset_target_properties(Qt5::Core PROPERTIES MAP_IMPORTED_CONFIG_COVERAGE "RELEASE")​

05、模块变量

>>>用find_package加载的Qt模块设置各种变量。 例如,find _ package(Qt5 COMPONENTS Widgets)成功时,会使以下变量可用:

变量

描述

Qt5Widgets_COMPILE_DEFINITIONS

根据库进行构建时要使用的编译定义列表。

Qt5Widgets_DEFINITIONS

根据库进行构建时要使用的定义列表。

Qt5Widgets_EXECUTABLE_COMPILE_FLAGS

根据库生成可执行文件时使用的标志字符串。

Qt5Widgets_FOUND

描述是否成功找到模块的布尔值。

Qt5Widgets_INCLUDE_DIRS

构建库时要使用的包含目录列表。

Qt5Widgets_LIBRARIES

模块导入目标的名称:Qt5::Widgets

Qt5Widgets_PRIVATE_INCLUDE_DIRS

构建库和使用私有Qt API时使用的私有include目录列表。

Qt5Widgets_VERSION_STRING

包含模块版本的字符串。

06、安装变量

>>>此外,还有一些变量与特定的包无关,而是与Qt安装本身有关。

变量

描述

QT_DEFAULT_MAJOR_VERSION

在混合Qt 5和Qt 6项目的情况下,控制qt_ commands转发到的Qt版本的整数。在相应的find_package()调用之前,需要将它设置为5或6。如果设置为5,以qt_开头的命令将调用以qt5_开头的命令。如果设置为6,它们将调用以qt6_开始的对应方。如果没有设置,第一个find_package调用将定义默认版本。这个功能是在Qt 5.15中添加的。

QT_LIBINFIX

用-libinfix配置Qt时,保存库名中使用的中缀的字符串。

QT_NO_CREATE_VERSIONLESS_FUNCTIONS

从Qt 5.15开始,模块不仅定义了以qt5_开头的命令,还定义了以qt_开头的命令。可以在find_package之前设置QT_NO_CREATE_VERSIONLESS_TARGETS 来防止这种情况。

QT_NO_CREATE_VERSIONLESS_TARGETS

从Qt 5.15开始,模块不仅定义了以Qt 5:::开头的目标,还定义了以Qt:::开头的目标。可以在find_package之前设置QT_NO_CREATE_VERSIONLESS_TARGETS 来防止这种情况。

QT_VISIBILITY_AVAILABLE

在Unix上,描述Qt库和插件是否用-fvisibility=hidden编译的布尔值。这意味着只导出选定的符号。

07、CMake命令参考

Qt5::Core

qt5_add_big_resources

将大型二进制资源编译成目标代码

qt5_add_binary_resources

从Qt资源文件列表创建一个RCC文件

qt5_add_resources

将二进制资源编译成源代码

qt5_generate_moc

对输入文件调用moc

qt5_import_plugins

指定要为静态Qt构建导入的自定义插件集

qt5_wrap_cpp

创建来源的.moc文件

qt_add_big_resources

将大型二进制资源编译成目标代码

qt_add_binary_resources

对输入文件调用moc

qt_add_resources

指定要为静态Qt构建导入的自定义插件集

qt_generate_moc

对输入文件调用moc

qt_import_plugins

指定要为静态Qt构建导入的自定义插件集

qt_wrap_cpp

创建来源的.moc文件

Qt5::DBus

qt_add_dbus_adaptor

为D-Bus接口生成适配器类

qt_add_dbus_interface

生成实现D-Bus接口描述文件接口的C++源代码

qt_add_dbus_interfaces

为D-Bus接口描述文件生成实现接口的C++源代码

qt_generate_dbus_interface

从头文件生成D-Bus接口

Qt5::LinguistTools

qt5_add_translation

编译Qt语言学家.ts文件到.qm管理文件

qt5_create_translation

建立Qt语言学家翻译工具链

Qt5::RemoteObjects

qt5_generate_repc

从Qt远程对象创建C++类型.rep文件

Qt5::Widgets

qt5_wrap_ui

为创建源.ui文件

qt_wrap_ui

为创建源.ui文件

总结

>>>在这里分享一下目前个人使用的串口工具和TCP调试助手工具,以及sql工具。喜欢的码友记得【转存】到个人盘,方便下载和预览。 【超级会员V1】通过百度网盘分享的文件:虚拟串口+串口助...等3个文件 链接:https://pan.baidu.com/s/1Ku_Nj4RKGDGiby9g9-T9rw?pwd=w87G 提取码:w87G 复制这段内容打开「百度网盘APP 即可获取」

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 点击上方"蓝字"关注我们
  • 01、CMake
  • 02、如何使用CMake3.1.0带Qt 5
  • 03、构建GUI执行文件
  • 04、导入库目标
  • 05、模块变量
  • 06、安装变量
  • 07、CMake命令参考
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档