对于一个使用MQTT的项目,我总是必须从源代码编译QtMqtt模块,因为它没有包含在预构建的Windows版本中,也不能选择安装。在Qt5中,这非常简单:从官方git(https://code.qt.io/cgit/qt/qtmqtt.git/)下载源代码,在QtCreator中打开.pro文件并编译项目。为了安装,我只是将.dll文件移到了我的Qt安装目录中。
现在在Qt6中,构建过程从qmake切换到了cmake,所以我不能简单地在QtCreator中加载项目,而是必须使用CMake手动编译它,我觉得这非常不直观,而且容易出错。据我所知,从现在开始,我不能自己编译单个模块。但是必须获得完整的Qt6.2.0源代码(即通过安装程序选项),然后在CMake上使用--target
选项只构建特定的模块。
1.从安装程序获取Qt源代码(安装到Qt/6.2.0/Src
)
1.根据this manual创建命令行环境
1.打开cmd环境,导航至构建文件夹(即Qt/6.2.0/build
)
1.使用以下命令配置生成:..\Src\configure -prefix Qt\6.2.0\build
1.使用命令cmake --build . --target qtmqtt
通过cmake进行构建
1.使用命令cmake --install .
安装
发生的情况是,配置工作正常,构建也应该正常,但安装失败,出现如下错误:
CMake Error at qtbase/src/3rdparty/libpng/cmake_install.cmake:41 (file):
file INSTALL cannot find
"F:/DEV/prog/Qt/6.2.0/build/qtbase/mkspecs/modules/qt_ext_libpng.pri": File
exists.
Call Stack (most recent call first):
qtbase/src/3rdparty/cmake_install.cmake:42 (include)
qtbase/src/cmake_install.cmake:42 (include)
qtbase/cmake_install.cmake:244 (include)
cmake_install.cmake:42 (include)
文件夹Qt/6.2.0/build
只包含.cmake文件,但没有任何对我有用的.dll文件。我只是不明白如何正确地设置所有的cmake。为什么他们要把它弄得这么复杂,毕竟在Qt5中用qmake编译模块是相当容易的?
3条答案
按热度按时间cgvd09ve1#
据我所知,从现在开始,我不能自己编译单个模块,而是必须获得整个Qt 6.2.0源代码(即通过安装程序选项)
这是不正确的。给定一个预构建的Qt,您应该仍然能够通过运行以下命令从源代码构建qmqtt包:
oiopk7p52#
尝试将
cmake --install .
替换为cmake --install qtmqtt
wtzytmuj3#
使用Qt安装程序在
${HOME}/Qt/6.4.0/
中安装了Qt 6.4.0,这就是我在Linux上的操作。详细步骤:
在干净项目上测试:
编辑项目的
CMakeLists.txt
文件(1)将
Mqtt
添加到相关的find_package
宏,如下所示:(2)将
Qt${QT_VERSION_MAJOR}::Mqtt
添加到target_link_libraries
行,如下所示:(3)运行CMake
尝试实际使用模块
在项目源代码中添加相关的include,如下所示:
重新生成项目。应干净地编译和链接。