Qt | CMake(Qt5 VS Qt6)

533 阅读6分钟

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

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文件的位置。****

# 设置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配置。

# 查找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个文件

链接:pan.baidu.com/s/1Ku_Nj4RK…

提取码:w87G

复制这段内容打开「百度网盘APP 即可获取」

故我在

点击下方卡片 关注我