Qt实现一个简单的编译器(软件生成器)

Qt实现一个简单的编译器(软件生成器)

本文章只记录如何用Qt实现一个简单编译器,即点击本软件中的按钮便可在另一目录中生成一个新的软件(与本软件不冲突)。
Qt实现一个简单的编译器(软件生成器)
Qt实现一个简单的编译器(软件生成器)


文章目录


前言

如何实现编译功能,听起来像是一个很复杂的事,但其实只要计算机里有我们需要的编译环境,实现起来也就不难了。我们只需要在点击编译按钮的槽函数中启动命令行执行另一程序的代码并打包即可。


提示:以下是本篇文章正文内容,下面记录了如何用命令行执行程序、如何在软件生成器中生成一个可执行文件两方面。

一、命令行执行Qt程序

1.使用Qt for Desktop MinGW 7.3.0 64-bit

Qt for Desktop MinGW 7.3.0 64-bit是Qt自带的命令行窗口,我在网上查了一下介绍说它是cmd的快捷链接,也就是说和cmd是一回事,只是在cmd里多执行了几句命令,想了解的可以打开快捷方式的文件所在位置查看属性,可以看到目标位置写着:C:\Windows\System32\cmd.exe /A /Q /K D:\Qt\Qt5.12.10\5.12.10\mingw73_64\bin\qtenv2.bat,我大胆的猜测了下这应该是意味着双击打开该快捷方式时,打开的其实就是cmd,只是打开时就执行了qtenv2.bat文件,这个猜测在后续尝试中也得到了证实。
Qt实现一个简单的编译器(软件生成器)
接着说如果使用Qt 5.12.10 (MinGW 7.3.0 64-bit),怎么编译.pro文件:

1.先指定项目目录

cd D:\test

2.生成makefile文件

如果没有.pro文件,需要先生成.pro,建议提前写好.pro文件,执行时可能会缺少模块等问题还需现加。

qmake -project

如果有.pro文件只需执行qmake即可。

qmake

3.编译程序

mingw32-make

不要质疑,即使是64位也是mingw32-make,其实是执行的64位目录里的mingw32-make.exe。

Qt实现一个简单的编译器(软件生成器)

4.为生成的exe文件生成所依赖的dll

mingw32-make会将exe默认生成到release中,我们只需执行打包exe的方法即可。

cd D:\test\release
windeployqt test.exe

5.双击.exe文件,验证结果

Qt实现一个简单的编译器(软件生成器)

2.直接使用CMD执行程序

1.将刚才找到的qtenv2.bat复制到目录下

2.运行cmd执行命令:

cd /d D:\test
qtenv2.bat

3.后续步骤同使用Qt for Desktop MinGW 7.3.0 64-bit

二、如何在软件生成器中生成一个可执行文件

1.创建脚本文件

在一中已经实现了如何生成一个可执行文件了,我们只需要在生成器项目中调用命令行来控制何时编译另一个项目,调用cmd的方法网上皆能查到,不再赘述。我选择使用.bat文件,点击按钮时,一次性跑完。
将刚才复制的qtven2.bat重命名为qtmake.bat,右击编辑,前面的不需要改,把后续操作加上:

@echo off
echo Setting up environment for Qt usage...
set PATH=D:\Qt\Qt5.12.10\5.12.10\mingw73_64\bin;D:/Qt/Qt5.12.10/Tools/mingw730_64\bin;%PATH%
cd /D D:\Qt\Qt5.12.10\5.12.10\mingw73_64

CD /D D:\Wwj\testCompileQt\testCompileQt
qmake
mingw32-make
CD /D D:\Wwj\testCompileQt\testCompileQt\release
windeployqt testCompileQt.exe

2.执行脚本文件

按钮槽函数中执行脚本文件:

QProcess qtmake(NULL);
qtmake.setWorkingDirectory("../test");//.bat为文件所在文件夹路径
QString command = "../test/qtmake.bat";//.bat的路径
qtmake.start(command);
qtmake.waitForFinished();

执行后,点击按钮测试有效。


总结

Qt实现一个编译器,听起来很难,实际操作起来其实很简单,总的来说就是,创建两个项目,一个是所谓编译器,另一个是被执行项目,编译器的功能只是调用命令行来编译被执行项目。

上一篇:centos7 升级docker 最新版本


下一篇:数据库的简单安装