qmake 工具有助于简化跨平台的开发项目的构建过程。它用于自动生成 Makefile,借助 qmake 我们创建每个 Makefile 时可能只需要简单地编写几行信息即可。
qmake 工具为我们提供了一个面向项目的构建系统,用于管理应用程序、库和其他组件的构建过程。利用 qmake 使我们能够控制所使用的源文件,并可以在单个文件中简要地描述流程中的每个步骤。qmake 将每个 project 文件中的信息解析并生成对应的 Makefile 文件,之后就可以使用这个 Makefile 文件执行编译和链接。
但是,蛋疼的一幕出现了,Qt公司准备放弃qmake了,转战CMake。 尽管CMake异常的强大,使用广泛,对我们这些常年中意于QMake的程序员,就痛苦了。希望QMake能够被Qt公司支持的更久一些吧!
项目由 project (以 .pro 为后缀) 文件的内容描述,以pri文件为共同引用项。pro和CMake中的CMakeLists.txt相似,pri和CMake中的xx.cmake文件类似。
假设有hello.cpp, hello.h, main.cpp源文件
SOURCES += \
hello.cpp \
main.cpp
假设有hello.cpp, hello.h, main.cpp源文件
HEADERS += hello.h \
设置可执行程序的名称
TARGET = helloworld
RESOURCES += \
tcpclientcontrol.qrc
FORMS += \
mainwindow.ui \
INCLUDEPATH += \
$$PWD/common \
# $$PWD是当前pro文件所在目录
LIBS += \
-L"$$PWD/depends/QCefView/Release/lib" -lQCefView \
# -L和-l都是固定字符,"$$PWD/depends/QCefView/Release/lib"是路径,QCefView是库名称,不带后缀名
DESTDIR = bin
RC_ICONS += icons/logo.ico
# 定义宏语法,下面定义了一个CustomMarco宏
DEFINES += CustomMarco
#定义整形变量,宏定义赋值的等号“=”两边不能有空格,即写成DEFINES += LENGTH = 3会编译报错
DEFINES += LENGTH=3
#定义字符串变量,字符串必须使用 \\\" 引起来
DEFINES += APP_VERSION=\\\"2.1\\\"
CONFIG(debug, debug|release) {
# debug环境
} else {
# release环境
}
#函数原型为contains(variablename, value),如果 variablename 包含 value 则返回成功
#QMAKE_HOST.arch:qmake变量,计算机架构
#x86_64:终端输入 lscpu 可以参看当前计算机架构,x86 是 x86_64,arm64 是 aarch64,
#或者直接 message($$QMAKE_HOST.arch) 输出到概要信息
contains(QMAKE_HOST.arch, x86_64) {
message("编译平台: x86")
} else {
message("编译平台: arm64")
}
# 或者下面的方式也行
contains(QT_ARCH, arm64) {
message("arm64")
} else {
message("x86")
}
# win系统
win32 {
}
# linux系统
unix{
}
# mac系统
macx {
}
# msvc编译器
win32-msvc*{
message("msvc")
}
# gcc编译器
win32-g++{
message("g++")
}
contains(QT_ARCH, i386) {
# 32位
message("32-bit")
} else {
# 64位
message("64-bit")
}