0
点赞
收藏
分享

微信扫一扫

MySQL双主双从实现方式

zhyuzh3d 2024-07-24 阅读 19

一、pro文件

.pro就是工程文件(project),是Qt项目的主配置文件,用于描述整个项目的基本信息和编译配置。在Qt中用qmake生成makefile文件,它是由.pro文件生成而来的,.pro文件的具体格式语法如下:

1.1 注释

.pro文件中注释采用#号,从“#”号开始,到该行的结束,快捷键:Ctrl+/,例如:

1.2 跨平台设置

 为防止出错,后面的左大括号要跟着关键字

win32{

}

unix{

}

1.3 模板TEMPLATE

模板变量告诉qmake为这个应用程序生成那种makefile文件。下面是可提供使用的选择:

TEMPLATE=app
  1. app-建立一个应用程序的makefile。这是个默认值,所以如果模板没有被指定,该模板将会被使用。
  2. lib -建立一个库的makefile,创建静态库的项目,可供其他项目进行链接和使用。
  3. vcapp -建立一个应用程序的Visual Studio项目文件。
  4. vclib -建立一个库的VisualStudio项目文件。
  5. subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile,并且为它调用make的makefile。创建包含多个子项目的容器项目,用于管理多个相关的子项目。

1.4 添加文件路径

 

  1. TRANSLATIONS:指定包含用户界面翻译文本的翻译(.ts)文件列表
  2. HEADERS += 用来添加头文件,指定项目中的头文件(.h文件)。将所有的头文件列在此处,以便在编译过程中进行包含。
  3. SOURCES += 用来添加源文件,指定项目中的源代码文件(.cpp文件)。将所有的源文件列在此处,以便在构建过程中进行编译。
  4. FORMS += 用来添加 ui 文件,指定项目中的窗体设计文件(.ui文件)。窗体设计文件由Qt Designer生成,定义了用户界面的布局和组件。
  5. RESOURCES += 用来添加资源文件,指定项目中的资源文件(.qrc文件)。资源文件可以包含图像、字体、翻译文件等,通过将它们添加到资源文件中,可以方便地进行访问和使用。
  6. INCLUDEPATH += 用来存放添加头文件的路径,指定项目的头文件搜索路径。如果您的项目中使用了其他文件夹中的头文件,可以将这些文件夹添加到INCLUDEPATH中,以便编译器能够找到并包含它们。
  7. DEPENDPATH += 用来添加依赖相关路径,
  8. DEPENDPATH和INCLUDEPATH有什么异同点
  9. LIBS += 用来添加库文件,指定项目所需的外部库依赖。如果您在项目中使用了第三方库,需要在LIBS中添加相应的库名称和路径,以确保链接时能够正确地找到并使用这些库。
  10. LIBS += -L"头文件路径" -l"库文件名"
  11. 实例(注意库名没有后缀)
  12. TARGET:指定项目的目标文件名。默认情况下包含的项目文件的基本名称,可以自定义生成的可执行文件或库的名称
  13. QT:指定项目使用的Qt模块和版本号。通过QT选项,可以声明项目所需的Qt模块,并指定所需的Qt版本。例如,QT += core gui表示项目需要使用Qt的核心模块和图形用户界面模块。

  14. DEFINES:定义预处理器宏。如果您需要在代码中使用特定的宏标记,可以在DEFINES中添加它们。

  15. PRE_TARGETDEPS:指定项目构建之前的依赖项。如果您需要在构建项目之前执行其他任务或依赖其他项目,可以在PRE_TARGETDEPS中指定它们。
    通过在.pro文件中配置这些选项,您可以根据项目的需求和要求,定制和管理Qt项目的构建过程、依赖关系和设置。

  16. $$PWDpro或.pri所在路径,注意区分_PRO_FILE_PWD_

 

16. OUT_PWD:makefile所在路径,和_PRO_FILE_PWD_对应

17. PRO_FILE:pro的全路径

18. PRO_FILE_PWD:pro文件所在路径(注意:即使它在pri文件内,也是指代的包含它的pro所在的路径)

 

将某一文件复制到指定路径 

 

16 . DESTDIR:指定在何处放置目标文件

 17.UI_DIR:指定来自uic的所有中间文件放置的目录(.ui文件转化成ui_*.h文件的存放目录)

18. MOC_DIR:指定moc命令将含Q_OBJECT的头文件转换成标准.h文件的存放目录

19. OBJECTS_DIR:指定目标文件的存放目录

OBJECTS_DIR += ../tmp 

20. RCC_DIR:指定rcc命令将.qrc文件装换成qrc_*.h文件的存放目录 

 

注意:

INCLUDEPATH一般用在添加第三方 .dll 的时候所需的头文件路径;

HEADERS用来添加当前项目的路径;

LIBS += -LC:/Windows/System32/ -luser32

格式为:-L 路径 -l 库名

库比较多的时候可以用 \来达到换行目的

引用相对路径的库文件的时候,$$PWD 指的是项目 .pro 文件所在的路径,`$$OUT_PWD` 指的是编译的目标所在的路径。如果不清楚路径,可以使用 message($$PWD) 打印路径查看绝对路径。

  • DESTDIR += 指定生成的应用程序的存放目录。
  • TARGET = 指定生成的应用程序的名字。
  • UI_DIR += 用来存放编译的时候 ui 生成的 ui_*.h 文件。
  • RCC_DIR += 存放 .qrc 生成的 qrc_*.h 文件。
  • MOC_DIR += 用来存放 moc 命令转换添加的 Q_OBJECT 的 .h 文件为标准 .h 文件的存放路径。
  • OBJECTS_DIR += 用来存放目标文件 .obj 存放的路径。

注:

UI_DIR 、RCC_DIR 、 MOC_DIR 、OBJECTS_DIR 可以认为都是用来存放中间文件,只是存放的中间文件有所不同,不指定的话默认会存放在 .pro 文件所在的路径,显得工程看起来比较乱

1.5 添加配置信息

  • CONFIG += 用来指的应用程序的配置信息。
参数说明

器标志

release启用发布模式,优化生成的可执行文件以获得更好的性能。项目被联编为一个发布的应用程序,编译不具有调试信息可执行文件或者库(如果同时指定debug release时,只有debug有效)
debug启用调试模式,允许使用调试器进行代码调试。项目被联编为一个debug的应用程序
debug_and_release工程同时用调试和发布模式编译
build_all如果指定是debug_and_release模式,工程默认是同时用调试和发布模式编译
ordered使用subdirs模板时,本选项指定了子目录应该按照给出的顺序编译
warn_on编译器输出尽可能多的警告信息,如果“warn_off”被指定,它将被忽略
warn_off关闭大量警告,默认是打开的

/

的类型

qt

指应用程序是一个Qt应用程序,并且Qt库将会被连接

thread支持线程,当CONFIG参数包含qt的时候,这个是默认支持的
x11应用程序是一个X11应用程序或库
c++11启用C++11标准,允许在项目中使用C++11的新特性。
windows只用于“app”模版:应用程序是一个Windows下的窗口应用程序
console只用于“app”模版:应用程序是一个Windows下的控制台应用程序

dll

只用于“lib”模版:库是一个共享库(dll),动态编译库

staticlib

只用于“lib”模版:库是一个静态编译库

plugin

只用于“lib”模版:库是一个插件,这将会使dll选项生效

 

当我们写CONFIG变量时,可以使用

如:CONFIG = qt release warn_off

或者CONFIG = qt

      CONFIG += release

      CONFIG += warn_off

当想要移除某个设置时:CONFIG -= warn_off

pro文件里,访问环境变量的用法是:$(varName)

pro文件里,访问Qt配置参数的用法:$$[varName]

1.6 变量 

$$varName$${varName}

qmake工程文件内定义变量的值

$$(varName)

qmake运行时,环境变量的值

$(varName)

makefile被处理时,环境变量的值

$$[varName]

Qt配置选项的值

${varName}

你可能见过这个用法,但本文不讨论这个东西,以后用到时会提及

 

这4中用法区别何在?没有例子我还真说不明白...

1.6.1 $$varName

例子:

  • test.pro

运行qmake时,输出结果是

  • 何时加大括号?当变量和后面的字符连接到一块的时候。
  • build_pass 干嘛用的?自己试试看吧,如果没有它,同样的消息在windows下会被输出3次(因为会生成3个makefile文件,每个一次)。
1.6.2 $$(varName)

环境变量,就是大家通常说得环境变量。例子:

  • test.pro

运行qmake时,结果:

1.6.3 $(varName)

makefile被处理时,环境变量的值?如何理解??

看例子:

  • test.pro

执行qmake

生成的makefile:

为了对比,可以将单$符号,改成$$再试试看看,运行命令,结果:

1.6.4 $$[varName]

Qt配置选项的值?何解??

  • 配置选项值有哪些?
  • 有什么用呢?比如,我们编译一个动态库,想将dll放置到Qt的bin目录下(供其它程序使用):
  • 除了这些还有其他值么?恩,你可以自己设置一些值,比如

然后就可以在pro文件内用 $$[dbzhang] 了

注:在Qt5下,有 qmake -unset dbzhang 可以取消设置,在Qt4下没有 unset!

注:设置值是通过QSettings保存的。你应该知道保存在何处了,呵呵

QSettings(QSettings::UserScope, "Trolltech", "QMake");

晕死,4个这东西竟然写了这么长。只好本文标题中加个(一),慢慢写二三四了。

1.7 生成Makefile

 当你已经创建好你的项目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的项目文件那里然后输入:

Makefile可以像这样由“.pro”文件生成:

qmake -o Makefile hello.pro

对于Visual Studio的用户,qmake也可以生成“.dsp”文件,例如:

qmake -t vcapp -o hello.dsp hello.pro

检查多于一个的条件 

假设使用Windows并且当你在命令行运行应用程序的时候想能看到qDebug()语句。除非在联编i程序的时候使用console设置,不会看到输出,可以很容易把console添加到CONFIG行中,这样在Windows下,Makefile就会有这个设置。但是如果只想在应用程序运行在Windows下并且当debug已经在CONFIG行中时,添加console。需要两个嵌套的作用域;只要生辰一个作用域,然后在它里面再生成另一个。把设置放在最里面的作用域里,如下:

 嵌套的作用域可以使用冒号连接起来,如下:

 如果一个文件不存在,停止qmake

 如果某一个文件不存在时,不想生成Makefile,通过使用exists()函数来检查一个文件是否存在。可通过使用error()函数把正在运行的qmake停下来。这和作用域的工作方式一样。只要用这个函数来替换作用域条件,例如以main.cpp文件的检查如下:

 "!"用来否定这个测试,比如,如果文件存在,exists(main.cpp)是真,如果文件不存在,!exists(main.cpp)是真。

1.8 实例分析

  1. #:注释

  2. CONFIG:项目配置项,指定工程配置和编译参数

  3. DEFINES:添加变量,作为预处理宏,指定预定义预处理符号

  4. DEPENDPATH:依赖关系

  5. DESTDIR:指定目标文件的位置,指定可执行文件放置的目录

  6. DLLDESTDIR:指定目标库文件放置目录

  7. FORMS:指定UI文件

  8. HEADERS:指定头文件

  9. INCLUDEPATH:包含目录,指定C++编译器搜索头文件路径

  10. LIBS:指定链接库

  11. MOC_DIR:指定来自moc所有中间文件放置的目录

  12. OBJECTS_DIR:指定所有中间文件.o(.obj)放置的目录

  13. QT:指定项目中使用Qt的模块

  14. RCC_DIR:指定Qt资源编译器输出文件的目录(.qrc文件转换成qrc_ *.h文件的存放目录)

  15. RESOURCES:指定资源文件 (qrc)

  16. RC_ICONS:仅适用于Windows,指定的图标应该包含在一个生成的.rc文件里

  17. SOURCES:指定所有源文件

  18. TARGET:指定目标文件名称,指定可执行文件或库的基本文件名,默认为当前目录名

  19. TEMPLATE:模板变量告诉qmake为这个应用程序生成哪种makefile

  20. TRANSLATIONS:指定翻译文件

  21. VERSION:指定目标库版本号

TEMPLATE = app

LANGUAGE = C++



QT += widgets xml sql network opengl

CONFIG += qt warn_on release
#这里使用“+ =”是因为添加配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项是更安全的;
#qt表示告诉qmake这个应用程序是使用Qt来联编的,也就是说qmake在连接和为编译添加所需的包含路径的时候会考虑到Qt库的;
#warn_on表示告诉qmake要把编译器设置为输出警告信息的;
#release表示告诉qmake应用程序必须被联编为一个发布的应用程序。在开发过程中,程序员也可使用debug来替换release

HEADERS += *.h

SOURCES += *.cpp

FORMS += *.ui



RESOURCES += \

DiffusionFilter.qrc

默认生成.pro文件内容如下,解释见注释:

# [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


除工程默认的一些字段,.pro文件还有一些其他字段:
# 目标可执行文件的名称,不指定默认为工程名
TARGET = exe_name

# 目标可执行文件的存放目录,不指定默认为realse目录
# 几个指定目录的符号:
# 宏 $$PWD 代表当前目录和 ./ 等效
# ../ 代表上一级目录
DESTDIR = exe_dir

# 编译宏开关,根据不同宏作不同的编译
DEFINES += defines

# obj文件目录,即 .o 文件
OBJECTS_DIR = obj_dir

# 资源文件路径,包括图片、音频等(项目根目录的相对路径)
RESOURCES += res.rc

# 链接库路径(项目根目录的相对路径)
DEPENDPATH += depend_dir

# 链接库文件(项目根目录的相对路径)
LIBS += -Llib_name
# 也可以直接写带路径的链接库文件
LIBS += -Llib_dir_name

# 引用库头文件路径(项目根目录的相对路径)
INCLUDES += include_dir

# 项目使用的模板类型
TEMPLATE = app
TEMPLATE = lib

 二、pri文件

.pri文件适用于工程下面的小模块使用,.pro工程文件可配置添加多个.pri文件,也就是说一个工程下面可添加多个子模块。 

包含在 .pro 文件中的辅助文件,用于组织和管理项目中的共享代码、配置选项和编译规则。

使用pri将项目划分成子模块后,各个模块的相关内容,移动到各自的pri文件,实现解耦,便于管理。

.pri 文件(包含文件)

作用: .pri 文件用于包含在 .pro 文件中,可组织和管理项目中的共享代码、配置选项和编译规则。

内容: 通常,.pri 文件包含一组变量定义、函数定义、条件语句等,用于封装特定的功能或配置选项。

pri文件可以用来添加第三方模块;

pri 包含(include)的首字母。类似于C、C++中的头文件,可以把 *.pro 文件内的一部分内容单独放到一个 *.pri 文件内,然后包含进来

pri的配置项

.pri(.pro,project include)可以看成是.pro文件的子集,里面的内容大致和.pro是一样的。

pri文件创建:

pri文件实例: 

 

使用: 在 .pro 文件中,通过 include 指令可以引入 .pri 文件,从而将其内容合并到项目中,使得项目的管理更加灵活和模块化。 

三、prf文件 

prf文件中的f特性(feature)的首字符。

平常在pro文件中进行 CONFIG += warn_on 等设置时,就会调用对用的prf文件

prf路径:$$QTDIR/mkspecs/features

 

 四、prl文件


l 这个东西容易理解,链接(link)的首字符。
主要和生成与使用静态库密切相关(动态库也可以有该文件,去Qt安装目录下的lib目录下看看即可)。
生成静态库时,我们需要使用下列配置(进而生成和库文件同名的 *.prl 文件)

当工程的模板为app时,会自动添加如下指令(找库文件的时候,会尝试找相应的 *.prl 文件)

转自:1. https://zhuanlan.zhihu.com/p/616842442

2. QT项目的.pro文件说明_qt pro文件-CSDN博客

3. https://www.cnblogs.com/ybqjymy/p/18074798

4.https://blog.51cto.com/u_16417016/8930266

5.[QT_022]Qt学习之pro常用配置 

6.https://www.cnblogs.com/niuzhihong123-r/p/13475130.html 

7. https://blog.51cto.com/u_5048284/3687298

8. https://blog.51cto.com/u_5048284/3687298

举报

相关推荐

0 条评论