Qt中的qmake和cmake

Qt版本

Qt Creator 4.6.2
Desktop Qt 5.11.1 MinGW 32bit

qmake

查阅qmake有关的内容,都可以在Qt官网文档中的qmake Manual查阅。
使用Qt Creator创建项目的话,默认会生成一个可以直接运行的环境,项目文件(.pro)就是一个qmake文件。

HelloWorld.pro

#-------------------------------------------------
#
# Project created by QtCreator 2021-12-04T17:25:05
#
#-------------------------------------------------

# 使用Qt提供的core库和gui库
QT       += core gui

# 如果QT主版本号大于4的话,就加上widgets库
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

# 最后生成的目标文件
TARGET = HelloWorld
# 指定模板为app,qmake会生成一个应用程序的Makefile
TEMPLATE = app

# 工程中包含的源文件
SOURCES += main.cpp\
        mainwindow.cpp

# 工程中包含的头文件
HEADERS  += mainwindow.h

# 工程中包含的UI文件
FORMS    += mainwindow.ui

命令行方式编译

通过命令行的方式可以清晰地了解到Qt的代码是如何进行编译的,以下例子在linux的环境下执行。

qmake HelloWorld.pro

执行qmake命令之后,目录会多出两个文件,一个是编译使用的Makefile,一个是uic_wrapper.sh。

uic_wrapper.sh

#!/bin/sh
LD_LIBRARY_PATH=/Qt/x86_qt-everywhere-opensource-src-5.6.2/qtbase/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
export LD_LIBRARY_PATH
QT_PLUGIN_PATH=/Qt/x86_qt-everywhere-opensource-src-5.6.2/qtbase/plugins${QT_PLUGIN_PATH:+:$QT_PLUGIN_PATH}
export QT_PLUGIN_PATH
exec /Qt/x86_qt-everywhere-opensource-src-5.6.2/qtbase/bin/uic "$@"

uic_wrapper.sh将会在Makefile中使用到,它的作用就是用来指定uic工具的环境变量并且使用他。
接下来,执行make命令,看看Makefile具体做了哪些工作。

## 由于编译选项比较多,所以下面编译语句中的一些头文件路径,依赖库路径选项都进行删除
# 将UI文件转换成头文件
uic_wrapper.sh mainwindow.ui -o ui_mainwindow.h
# 编译main.cpp文件
g++ -c -o main.o main.cpp
# 编译mainwindow.cpp文件
g++ -c -o mainwindow.o mainwindow.cpp
# moc将qt扩展的c++语法转换成成标准c++代码,例如代码中存在 Q_OBJECT的话,就需要转换。
moc mainwindow.h -o moc_mainwindow.cpp
# 编译moc_mainwindow.cpp文件
g++ -c -o moc_mainwindow.o moc_mainwindow.cpp
# 最后链接,生成目标文件
g++ -o HelloWorld main.o mainwindow.o moc_mainwindow.o -lQt5Widgets -lQt5Gui -lQt5Core -lpthread

cmake

在qmake无法满足开发需求的时候,也可以使用cmake进行替代。
在Qt的官网文档中的Get started with CMake,已经给出了基础的CMakeLists.txt,可以基于这个进行修改。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值