使用g++命令生成Qt程序

上节我们给出了第一段 Qt 代码,它看起来非常简单,但是该如何生成 exe 程序,看一下实际的运行效果呢?

最简陋最原始的办法是使用 g++ 命令,这样做虽然繁琐,但是能够了解 Qt 程序的编译细节。更人性化的办法是使用 Qt Creator 集成开发环境,它把所有细节都配置好了,我们只需要点一下鼠标就能看到运行效果。

本节只演示 g++ 命令的使用,下节再演示 Qt Creator 的使用。

上节我们给出的代码是:

#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QLabel>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QMainWindow w;
    w.setWindowTitle("Widgets演示");  //设置标题
    w.resize(300, 140);  //设置客户区大小

    QLabel label("C语言中文网", &w);
    label.setGeometry(100, 50, 160, 30);
    w.show();

    return app.exec();
}

将代码保存到 main.cpp 源文件,并放到 D:/QtDemo 目录(你也可以使用其它名字,放到其它目录)。

我们需要使用 Qt 命令行工具,而不是 Windows 自带的命令行工具;Qt 命令行工具已经为我们配置好了 Qt 环境,编译和运行 Qt 程序非常方便。在开始菜单中可以找到 Qt 命令行工具:

Qt命令行工具
图1:Qt 命令行工具

使用 cd 命令进入 main.cpp 所在文件夹:

cd /d D:/QtDemo

然后执行如下命令就可以编译并连接生成 main.exe 程序:

g++  main.cpp  -std=c++0x  -I"D:/Qt/5.9/mingw53_32/include"  -L"D:/Qt/5.9/mingw53_32/lib"  -lQt5Core -lQt5Gui -lQt5Widgets  -o main

对 g++ 命令的几点说明:

  • main.cpp 是源码文件;
  • -std=c++0x 表示启用 C++11 标准;
  • -I"D:/Qt/5.9/mingw53_32/include" 是指加入包含文件的路径(-I是大写的 i,即 IncludePath 首字母),该 include 文件夹就是 Qt 库的头文件位置;
  • -L"C:/Qt/Qt5.7.0/5.7/mingw53_32/lib" 则指定了链接时需要的 Qt 库文件所在位置(-L是 LibraryPath 首字母);
  • -lQt5Core 是指链接到 libQt5Core.a 库文件(-l是 link 链接的首字母,目标程序链接 libQt5Core.a 库文件后运行时需要 Qt5Core.dll),这是 Qt 的核心库,所有 Qt 程序都要用到它;
  • -lQt5Gui 是指链接到 libQt5Gui.a(运行时对应 Qt5Gui.dll),这是负责 Qt 程序底层绘制图形界面的库;
  • -lQt5Widgets 是指链接到 libQt5Widgets.a(运行时对应 Qt5Widgets.dll),是包含几乎所有 Qt 图形控件和窗口的库;
  • 最后的 -o main 是指生成的目标程序名字为 main(默认扩展名 .exe)。

上述命令涵盖了编译和链接的全过程,会直接生成 main.exe。生成之后输入 main.exe 就可以运行该程序了。

编译、连接并运行 Qt 程序
图2:编译、连接并运行 Qt 程序

最后还需要补充两点:
1) main.exe 是使用动态链接的,由于 Qt 命令行工具已经配置好了依赖库路径,所以可以在 Qt 命令行工具里运行。但是不能直接双击 helloqt.exe 运行,会提示缺少依赖的 dll 动态库,其依赖的动态库都位于 D:/Qt/5.9/mingw53_32/bin 文件夹里。一般 Qt 程序在 Windows 系统里运行所依赖的动态库比较多,以后会讲 Qt 程序的静态链接发布方式,在讲 Qt 静态库之前大家不要纠结这些动态库的事,都在 Qt 命令行工具里运行程序就行了。

2) 对于新的 Qt 5.7.0 以上版本,都必须使用 C++11 选项来编译,g++的 C++11 选项是-std=c++0x(最新的 VS 编译器默认开启 C++11 支持,不需要这个选项),因此对于最新的 Qt 开发环境,本教程涉及到 Qt 程序手动用 g++ 编译的都要带上-std=c++0x选项。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/22437.html

(0)
上一篇 2021年7月20日
下一篇 2021年7月20日

相关推荐

发表回复

登录后才能评论