目录
.pro文件是qmake用来生成makefile文件的中间文件。
# [QT+= ]语法,定义该工程包含的Qt模块
QT += core gui
# 由于Qt5将widgets模块从gui模块独立出来了,所以定义Qt主版本大于4就要包含widgets模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
# 编译宏,使用c++17编译
CONFIG += c++17
# 也可以 CONFIG -=
# CONFIG -= debug 不编译debug类型
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
# 需要编译的源文件路径(项目根目录的相对路径)
SOURCES += \
main.cpp \
widget.cpp
# 需要编译的头文件路径(项目根目录的相对路径)
HEADERS += \
widget.h
# 需要编译的ui文件路径(项目根目录的相对路径)
FORMS += \
widget.ui
# 只知道是设置目标可以执行文件路径的,具体语法看不懂,如果你知道欢迎评论区留言
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
QT += core gui sql xml concurrent network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
-
QT += core gui sql xml concurrent network
:项目使用了 Qt 的core
(核心库)、gui
(图形界面)、sql
(数据库)、xml
(XML 解析)、concurrent
(并发处理)、network
(网络支持)。若项目中要排除某个模块,也可用QT -=
配置项。 -
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
:如果 Qt 版本大于 4,启用widgets
(窗口部件)和printsupport
(打印支持)。
LIBS
win32: LIBS += -lws2_32
LIBS += -L$$PWD/ -llibfftw3-3
-
win32: LIBS += -lws2_32
:在 Windows 平台上,链接 Windows Socket 2 库(ws2_32.lib
)。 -
LIBS += -L$$PWD/ -llibfftw3-3
:在当前目录($$PWD
)下查找libfftw3-3.lib
,用于 FFT 计算。
$$PWD 代表当前 .pro 文件所在的路径
-L$$PWD/. 表示在当前目录查找库文件
链接名为 libfftw3-3 的库文件
INCLUDEPATH
INCLUDEPATH += $$PWD/eigen-3.4.0 $$PWD/util/fftw3.h
-
$$PWD/eigen-3.4.0
:添加eigen
(一个 C++ 线性代数库)的路径,将 $$PWD/eigen-3.4.0 目录添加到编译器的头文件搜索路径 -
$$PWD/util/fftw3.h
:添加 FFTW 库的头文件路径。
这部分可以理解为别人写好了的头文件和源文件的库,直接拿来用。
宏定义DEFINES
想利用宏定义实现不同的代码功能,但不想每次都去代码里注释或者不注释相关的宏定义变量,在这种情况下,就可以在pro里面利用DEFINES字段实现相关宏的定义。
DEFINES += MYTEST
#ifdef MYTEST
qDebug() << "mytest ok";
#else
qDebug() << "mytest no";
#endif
// 输出信息 mytest ok 。
在 Qt .pro
文件中,DEFINES
变量用于定义 预处理宏(Preprocessor Macros),这些宏会在编译时传递给 C++ 预处理器,相当于在代码中使用 #define
预编译指令。例如:
DEFINES += QT_DEPRECATED_WARNINGS
// 相当于在编译时对所有源文件添加 -DQT_DEPRECATED_WARNINGS,在代码中相当于:
#define QT_DEPRECATED_WARNINGS
// QT_DEPRECATED_WARNINGS这个的作用是这样,Qt 编译器会对使用已废弃(Deprecated)的 API 进行警告。
// 在 Windows 上,默认使用 Unicode 字符集,但某些情况下可能需要关闭:被移除,可能是为了兼容非 Unicode 编码。
DEFINES -= UNICODE
CONFIG
CONFIG
变量用于 配置编译选项,影响项目的编译方式。例如,它可以控制是生成 静态库/动态库/可执行文件,还是启用 调试模式/发布模式 等。
CONFIG += debug 的作用是指定项目以调试模式进行构建。
另外,debug 配置仅适用于开发过程中进行调试,如果要发布或部署应用程序,应该使用 release 配置,它将编译优化过的可执行文件,以提供更好的性能。
CONFIG += release 来启用发布模式,适用于最终发布,优化后执行速度快。。
CONFIG(debug, debug|release){
}else{
}
CONFIG(debug, debug|release) 是一个条件语句,用于在 Qt 项目文件(.pro 文件)中根据配置进行条件编译。
它的作用是检查当前的构建配置是否是 debug ,如果是的话,执行花括号 { } 内的代码块。如果不是这两种配置之一,则会执行 else 后面的代码块。
通过这种方式,可以根据构建配置的不同,选择性地包含或排除某些代码、文件或设置,以适应不同的开发需求。
启用 C++11 / C++17
CONFIG += c++11
CONFIG += c++17
用于开启特定的 C++ 标准支持。
TARGET
TARGET = Synthesize
指定生成的可执行文件(或库)的 名称
TEMPLATE
TEMPLATE = app
指定 项目类型,app 表示要生成一个 可执行程序。
Qt .pro 文件中的 TEMPLATE 主要有以下几种:
app(默认):编译生成 可执行文件(应用程序)。
lib:编译生成 库文件(可动态库 dll/so 或静态库 lib/a)。
subdirs:用于 包含多个子项目(比如主工程管理多个模块)。