在Linux系统下,qmake是Qt框架提供的自动化构建工具,主要用于生成跨平台的构建脚本(如Makefile),简化Qt项目的编译、链接过程,本文将详细介绍qmake的安装、项目文件编写、构建流程及常用功能,帮助开发者高效管理Qt项目。

qmake的安装与环境配置
在Linux系统中,qmake通常随Qt开发包一同提供,不同发行版的安装命令略有差异:
-
基于Debian/Ubuntu的系统:
使用apt安装Qt开发工具包,包含qmake:sudo apt update sudo apt install qtbase5-dev-tools # 安装qmake及相关工具
安装后可通过
qmake --version验证是否成功,若显示版本信息则表示安装成功。 -
基于RHEL/CentOS的系统:
使用yum或dnf安装:sudo yum install qt5-qt-devel # CentOS 7及以下 sudo dnf install qt5-qt-devel # Fedora/CentOS 8+
-
从源码安装Qt(可选):
若需特定版本的Qt,可从官网下载源码编译安装,编译后会自动生成qmake,路径通常为Qt安装目录/bin/qmake,此时需将路径添加到系统环境变量PATH中:export PATH=/path/to/qt/bin:$PATH
qmake项目文件(.pro)的编写
qmake的核心是项目文件(扩展名为.pro),用于描述项目的源文件、头文件、依赖库、配置等信息,以下是常用语法和示例:
基本变量
| 变量名 | 功能描述 | 示例 |
|---|---|---|
TARGET |
指定生成的可执行文件或库名称 | TARGET = myapp |
SOURCES |
列出所有源文件(.cpp/.c等) | SOURCES += main.cpp utils.cpp |
HEADERS |
列出所有头文件(.h/.hpp等) | HEADERS += utils.h |
QT |
指定依赖的Qt模块 | QT += core gui widgets |
CONFIG |
项目配置( Debug/Release/静态库等) | CONFIG += debug c++11 |
模板(TEMPLATE)
模板定义项目的类型,常见值包括:

app:应用程序(默认,生成可执行文件)lib:库(生成静态库或动态库,需配合CONFIG += staticlib或sharedlib)subdirs:多项目构建(管理多个子项目)
示例项目文件
以下是一个简单的Qt GUI应用程序的.pro文件:
# 项目名称
TARGET = helloqt
# 模板:应用程序
TEMPLATE = app
# Qt模块依赖(GUI模块需widgets)
QT += core gui widgets
# C++标准
CONFIG += c++17
# 源文件和头文件
SOURCES += main.cpp mainwindow.cpp
HEADERS += mainwindow.h
# 编译选项(Debug模式下开启调试信息)
CONFIG(debug, debug|release) {
DEFINES += DEBUG
QMAKE_CXXFLAGS += -g
}
qmake构建流程
使用qmake构建项目通常分为三步:生成项目文件、生成Makefile、编译项目。
生成项目文件(.pro)
若项目尚未创建.pro文件,可使用qmake -project自动生成:
qmake -project
此命令会扫描当前目录下的.cpp、.h文件,生成一个基础的.pro文件,需手动补充QT模块和CONFIG等配置。
生成Makefile
在.pro文件所在目录执行,生成平台相关的Makefile:
qmake
qmake会根据.pro文件和系统环境生成Makefile,例如在Linux下生成基于make的Makefile,在Windows下生成基于nmake的Makefile。
编译项目
使用make命令编译项目(需安装构建工具,如build-essential或gcc):

make # 默认编译所有目标 make clean # 清理生成的临时文件 make install # 安装项目(需在.pro中配置安装路径)
编译完成后,生成的可执行文件通常位于项目目录的debug或release子目录(取决于CONFIG配置)。
qmake常用选项与高级功能
命令行选项
| 选项 | 功能描述 | 示例 |
|---|---|---|
-project |
生成基础项目文件(.pro) | qmake -project |
-makefile |
生成Makefile(默认行为) | qmake -makefile |
-o <file> |
指定输出文件名(如自定义Makefile名) | qmake -o Makefile.custom |
-v |
显示qmake版本信息 | qmake -v |
-after <code> |
在.pro文件解析后追加代码 | qmake -after "DEFINES += TEST" |
-spec <spec> |
指定平台规范(如linux-g++) | qmake -spec linux-g++ |
条件判断与变量操作
在.pro文件中,可使用条件语句处理不同平台的配置差异:
# 根据操作系统添加不同的库
unix {
LIBS += -lpthread # Linux下需链接线程库
}
win32 {
LIBS += -lws2_32 # Windows下需链接网络库
}
# 使用contains函数判断配置
contains(CONFIG, debug) {
message("Debug mode enabled")
}
# 自定义变量并使用
MY_LIBS = -lmath -lxml2
LIBS += $$MY_LIBS
多项目构建(SUBDIRS)
若项目包含多个子模块(如库和可执行文件),可使用SUBDIRS变量管理:
TEMPLATE = subdirs CONFIG += ordered # 按顺序构建子项目 SUBDIRS += libmylib # 子项目1:库 SUBDIRS += myapp # 子项目2:依赖库的应用
每个子项目需有自己的.pro文件(如libmylib.pro和myapp.pro),qmake会按顺序构建所有子项目。
注意事项
- Qt模块匹配:确保
.pro中的QT模块与实际代码使用的模块一致,例如使用QWidgets需添加widgets模块。 - 路径处理:若源文件位于子目录,需在
SOURCES和HEADERS中指定相对路径,如SOURCES += src/utils.cpp。 - 环境变量:若使用自编译的Qt,需设置
QTDIR环境变量,并确保qmake路径在PATH中。
相关问答FAQs
Q1:qmake和CMake在Qt项目中如何选择?
A1:qmake是Qt官方工具,对Qt项目支持原生,语法简单,适合中小型Qt项目;CMake是通用构建工具,跨平台能力强,适合复杂项目或混合非Qt代码的项目,若项目仅依赖Qt且无需跨语言集成,qmake更轻量;若需支持多语言(如C++/Python)或复杂依赖管理,CMake更合适。
Q2:如何解决qmake提示“Module Qt5Widgets not found”的错误?
A2:此错误通常因Qt模块未安装或环境变量未配置导致,解决方法:
- 检查Qt开发包是否完整安装(如Ubuntu需安装
qtbase5-dev和qtdeclarative5-dev); - 若使用自编译Qt,确保
QTDIR指向安装目录,并执行export PATH=$QTDIR/bin:$PATH; - 验证
qmake版本是否与模块版本一致(如Qt5需使用qmake而非qmake-qt4)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/15658.html