QT的工程文件解读

如下是QT的pro文件的部分内容,逐句解释一下#include(../common.pri)的文件内容:

INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD
QT *= network
greaterThan(QT_MAJOR_VERSION, 4): QT *= widgets

这是一个Qt工程项目的pro文件,pro文件定义了Qt项目的构建规则和相关配置。下面是对这个pro文件代码的解释:

1. `#include(../common.pri)`: 引用上级目录中的common.pri文件。common.pri文件可能包含了一些常用的宏定义或配置,避免在所有项目上都重复定义,可以在多个项目之间共享。

2. `INCLUDEPATH += $$PWD`: 向项目中添加一个编译器搜索路径,将当前工程目录添加到项目包含路径列表中。

3. `DEPENDPATH += $$PWD`: 向项目中添加一个编译依赖搜索路径,将当前工程目录添加到项目依赖路径列表中。

4. `QT *= network`: 在Qt库的模块中包含了网络组件。在依赖该项目时,将会自动链接Qt的网络库。

5. `greaterThan(QT_MAJOR_VERSION, 4): QT *= widgets`: 如果当前Qt版本大于4,那么也将项目中添加窗口组件。即当前Qt版本>=5时,将包含窗口组件库。

 在这里为什么`QT *= network`不是`QT += network`

在Qt中,QT宏定义作为Qt库的主要组成部分,用于头文件包含、链接库依赖和QT宏的定义等。以下是QT宏的四种用法:

1. `QT += module`:链接一个Qt模块库。
2. `QT -= module`:移除一个Qt模块库。
3. `QT = value`:定义一个宏,给一个值。
4. `QT *= value`:附加一个值到一个宏中。

`QT += module`是表示链接Qt模块库的操作,而`QT *= network`是附加一个值到QT宏中,即添加网络模块到原有的QT值中,其效果和`QT += network`相同,只是两种写法的语法略有不同。

如下是QT的pro文件的部分内容,逐句解释:

qtsingleapplication-uselib:!qtsingleapplication-buildlib {
    LIBS += -L$$QTSINGLEAPPLICATION_LIBDIR -l$$QTSINGLEAPPLICATION_LIBNAME
} else {
    SOURCES += $$PWD/qtsingleapplication.cpp $$PWD/qtlocalpeer.cpp
    HEADERS += $$PWD/qtsingleapplication.h $$PWD/qtlocalpeer.h
}

win32 {
    contains(TEMPLATE, lib):contains(CONFIG, shared):DEFINES += QT_QTSINGLEAPPLICATION_EXPORT
    else:qtsingleapplication-uselib:DEFINES += QT_QTSINGLEAPPLICATION_IMPORT
}

这是一个Qt工程项目的pro文件,下面是代码的解释:

1. `qtsingleapplication-uselib:!qtsingleapplication-buildlib { ... } else { ... }`:这是一个条件分支语句。如果 `qtsingleapplication-uselib` 宏未定义,或者 `qtsingleapplication-uselib` 宏定义为0,则执行 `{...}` 中的语句;否则执行 `else {...}` 中的语句。

2. `LIBS += -L$$QTSINGLEAPPLICATION_LIBDIR -l$$QTSINGLEAPPLICATION_LIBNAME`:将指定的路径和库文件添加到链接器的参数列表中,使链接器可以找到库文件并将其链接到生成的可执行文件中。

3. `SOURCES += $$PWD/qtsingleapplication.cpp $$PWD/qtlocalpeer.cpp`:向项目中添加源文件 qtsingleapplication.cpp 和 qtlocalpeer.cpp。

4. `HEADERS += $$PWD/qtsingleapplication.h $$PWD/qtlocalpeer.h`:向项目中添加头文件 qtsingleapplication.h 和 qtlocalpeer.h。

5. `win32 {...}`: 这是一个win32平台特定的条件判断,其中 `...` 是一组表达式和语句,只有当表达式成立时才会执行语句块。

6. `contains(TEMPLATE, lib):contains(CONFIG, shared):DEFINES += QT_QTSINGLEAPPLICATION_EXPORT`: 如果当前项目是一个库,并且是一个分享库,则定义 QT_QTSINGLEAPPLICATION_EXPORT 宏,这个宏用于在Windows平台上导出函数。

7. `else:qtsingleapplication-uselib:DEFINES += QT_QTSINGLEAPPLICATION_IMPORT`:如果 `qtsingleapplication-uselib` 宏已经定义且值为1,则定义 QT_QTSINGLEAPPLICATION_IMPORT 宏用于在Windows平台上导入函数。

总体来说,这些代码用于在Qt项目中包含单例模式的库 qtsingleapplication,并且适配在Unix和Windows操作系统平台上进行编译的需求。在Unix平台上,只需要添加实现和头文件即可,而在Windows平台上,还需要根据库类型的不同(shared或static)添加导出或导入宏来适配库的编译需求。

猜你喜欢

转载自blog.csdn.net/thanklife/article/details/130946799