深入Qt--pro文件解析

深入Qt–pro文件解析

在QT中使用qmake自动生成pro文件,如果要自己定制工程选项,则需要自行修改pro文件。

1.pro文件例子

创建Qt工程后,在工程目录中自动生成 pro文件。

下面有个例子:

QT       += core gui sql network serialport charts xml

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# 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

DESTDIR += bin

UI_DIR += build/ui

RCC_DIR += build/rcc

MOC_DIR += build/moc

OBJECTS_DIR += build/obj

#头文件
INCLUDEPATH+=src/

SOURCES += \
    env.cpp \
    main.cpp \
    src/Serial/serialworker.cpp \
    src/widget.cpp \
    utils/utils.cpp

HEADERS += \
    env.h \
    src/Serial/serialworker.h \
    src/widget.h \
    utils/utils.h
    
FORMS += \
    src/widget.ui

TRANSLATIONS += PCTest.ts

# Default rules for deployment.

qnx: target.path = /tmp/$${TARGET}/bin

else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

上面是修改后的pro文件,不做任何解释;

2.pro文件关键字

2.1. TEMPLATE :定义了工程的编译模式,默认编译为app。TEMPLATE可以为:app、lib(库)、subdirs(多级目录管理)等。

模板变量告诉qmake为这个应用程序生成哪种makefile。

可供使用的选项:

选项 说明
app 创建一个用于构建应用程序的Makefile(默认)。
lib 创建一个用于构建库的Makefile。
subdirs 创建一个用于构建目标子目录的Makefile,子目录使用SUBDIRS变量指定。
aux 创建一个不建任何东西的Makefile。如果没有编译器需要被调用来创建目标,比如你的项目使用解释型语言写的,使用此功能。注:此模板类型只能用于Makefile-based生成器。特别是,它不会工作在vcxproj和Xcode生成器。
vcapp 仅适用于Windows。创建一个Visual Studio应用程序项目。
vclib 仅适用于Windows。创建一个Visual Studio库项目。

2.2 TARGET:生成目标的名字。

2.3 DESTDIR:生成目标的路径。

2.4 DEPENDPATH:工程的依赖路径 。指定查看解决依赖关系的目录列表,当包含文件时使用。

2.5 INCLUDEPATH:指定工程要用到的头文件路径,一般包括用户自定义的头文件路径或没有放入系统头文件路径的头文件路径 。

2.6 SOURCES:工程需要的源文件 。

2.7 HEADERS:工程所需要的头文件,一般包括用户自定义的头文件或未放入系统头文件路径的头文件

2.8 FORMS:工程要用到的ui文件(ui文件时用QT设计器生成的)。

2.9 LIBS:加载动态库文件。

2.10 TRASHLATIONS:加载要用到的语言翻译*.ts文件 。

2.11 RESOURCES:加载要用到的资源*.qrc文件 。

2.12 CONFIG:指定编译器选项和项目配置,值由qmake内部识别并具有特殊意义。

告诉qmake应用程序的配置信息:这个变量可以用来指定是生成debug模式还是release模式,也可以都生成;也可以用来打开编译器警告(warn_on输出尽可能多的警告信息)或者关闭(warn_off -编译器会输出尽可能少的警告信息);还可以用来配置要Qt加载库,例如如果要用到Qt的多线程,则:CONFIG+=qt thread再例如配置debug或release模式。

以下配置值控制编译标志:

选项 说明
release 项目以release模式构建。如果也指定了debug,那么最后一个生效。
debug 项目以debug模式构建。
debug_and_release 项目准备以debug和release两种模式构建。
debug_and_release_target 此选项默认设置。如果也指定了debug_and_release,最终的debug和release构建在不同的目录。
build_all 如果指定了debug_and_release,默认情况下,该项目会构建为debug和release模式。
autogen_precompile_source 自动生成一个.cpp文件,包含在.pro中指定的预编译头文件。
ordered 使用subdirs模板时,此选项指定应该按照目录列表的顺序处理它们。
precompile_header 可以在项目中使用预编译头文件的支持。
warn_on 编译器应该输出尽可能多的警告。如果也指定了warn_off,最后一个生效。
warn_off 编译器应该输出尽可能少的警告。
exceptions 启用异常支持。默认设置。
exceptions_off 禁用异常支持。
rtti 启用RTTI支持。默认情况下,使用编译器默认。
rtti_off 禁用RTTI支持。默认情况下,使用编译器默认。
stl 启用STL支持。默认情况下,使用编译器默认。
stl_off 禁用STL支持。默认情况下,使用编译器默认。
thread 启用线程支持。当CONFIG包括qt时启用,这是缺省设置。
c++11 启用c++11支持。如果编译器不支持c++11这个选项,没有影响。默认情况下,支持是禁用的。
c++14 启用c++14支持。如果编译器不支持c++14这个选项,没有影响。默认情况下,支持是禁用的。

2.13 UI_DIR:UIC将ui转化为头文件所存放的目录 。

2.14 RCC_DIR:RCC将qrc文件转化为头文件所存放的目录。

2.15 MOC_DIR:MOC命令将含Q_OBJECT的头文件转换为标准的头文件存放的目录。

2.16 OBJECTS_DIR:生成的目标文件存放的目录 。

2.17 DEFINES:应用程序所需的额外的预处理程序定义的列表。

qmake添加这个变量的值作为编译器C预处理器宏(-D选项)。

2.18 QT 指定项目中使用Qt的模块。默认情况下,QT包含core和gui,以确保标准的GUI应用程序无需进一步的配置就可以构建。如果想建立一个不包含Qt GUI模块的项目,可以使用“ -=”操作符。

3. pro 注释

以“#”开始,到这一行结束。 快捷键:Ctrl + /

4. pro 编译输出信息

QT是跨平台的,所以我们在不同的平台上用同一个pro文件,这要加入有关平台的信息。windows平台是win32,Linux平台是unix。

可以通过在其它任何一个变量的变量名前加$$来把这个变量的值分配给当前的变量。

5.pro配置跨平台信息

a. Qt pro支持的平台信息

​ 1.单个写法:

​	win32:INCLUDEPATH += $$PWD/xxx/win32

​	win32:LIBS += $$PWD/xxx/win32/xxx.lib 

​	unix:INCLUDEPATH += $$PWD/xxx/unix

​	unix:LIBS += $$PWD/xxx/unix/xxx.so 

​	linux:INCLUDEPATH += $$PWD/xxx/linux

​	linux:LIBS += $$PWD/xxx/linux/xxx.so 

​ $$PWD 是pro所在目录,是相对目录,建议用相对目录;

​ 2.组合写法:

​	win32 {
​		INCLUDEPATH += $$PWD/xxx/win32
​		LIBS += $$PWD/xxx/win32/xxx.lib 
​	}

​	unix {
​		INCLUDEPATH += $$PWD/xxx/unix
​		LIBS += $$PWD/xxx/unix/xxx.so 
​	}

​	linux{
​		message(linux)
		INCLUDEPATH += $$PWD/xxx/unix
​		LIBS += $$PWD/xxx/unix/xxx.so 
​	}

b. 自定义平台编译选项,以支持多平台编译

​	DEFINES += ARM
​	#DEFINES += X86
​	#DEFINES += LINUX

​	if(contains(DEFINES,ARM)){
   		message("arm")
​		LIBS += $$PWD/xxx.a
​		LIBS += -L/home/xxx/ -lxxx
​	}elif(contains(DEFINES,LINUX)){
​		message("linux")
​		LIBS += $$PWD/xxx.a
​	}else{
   		 message("x86")
​		LIBS += $$PWD/xxx.lib
​	}

Qt pro还有很多特性,我们需要用到的,上面这些就已经足够了。保证了工程按照我们的平台信息、编译选项、调试选项、链接选项、宏定义进行编译,编译生成的中间文件、目标文件存放到指定目录,方便我们调试代码。

你可能感兴趣的:(深入Qt,qt,qt5)