QT工程pro文件编写详细说明

Qt程序通常使用Qt提供的qmake工具来编译。linux

qmake工具能够使用与平台无关的.pro文件生成与平台相关的makefile。该工具包含了调用Qt内置代码生成工具(mocuicrcc)的必要逻辑规则。程序员

 

能够在命令行下,输入qmake -project来生成平台无关的pro文件。安全

工程文件pro主要分为三种:app(单独的应用程序),lib(静态和动态库),subdirs(递归编译)。工程类型能够使用TEMPLATE变量来指定。app

如: TEMPLATE = app(默认不指定的状况下是app工程)函数

 

对于app工程或者lib工程,有如下这些常常使用的变量:工具

HEADERS:指定C++头文件post

SOURCES:指定C++实现文件ui

FORMS:指定须要uic处理的ui文件编码

RESOURCES:指定须要rcc处理的qrc文件插件

DEFINES:指定预约义预处理器符号

INCLUDEPATH:指定C++编译器搜索头文件路径

LIBS:指定工程要连接的库

CONFIG:指定工程配置和编译参数

QT:指定工程所要使用的Qt模块

VERSION:指定目标库版本号

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

DESTDIR:指定可执行文件放置的目录

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

 

 

CONFIG:指定工程配置和编译参数

如下对CONFIG变量作主要介绍:

debug:编译有调试信息的可执行文件或则库

release:编译不具备调试信息可执行文件或者库(若是同时指定debug release时,只有debug有效)

warn_off:关闭大量警告,默认是打开的

qt:指应用程序使用Qt

dll:动态编译库

staticlib:静态编译库

plugin:编译一个插件

console:应用程序须要写控制台

当咱们写CONFIG变量时,能够使用

如:CONFIG = qt release warn_off

或者CONFIG = qt

      CONFIG += release

      CONFIG += warn_off

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

 

 

在pro文件里,能够使

varName或者varName或者

{varName}来访问本身定义的变量,如

 

MyVersion = 1.2

FILE = 1.cpp

TARGET = improve$${MyVersion}

SOURCES = $$FILE

 

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

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

 

在不一样的编译平台上编译时,须要设定条件。如:

win32{

 SOURCES += 1.cpp

}else{

 SOURCES += 2.cpp

}

或者

win32:SOURCES += 3.cpp

 

 

 

在QT中,有一个工具qmake能够生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法以下:


1. 注释
从“#”开始,到这一行结束。

2.模板变量告诉qmake为这个应用程序生成哪一种makefile。下面是可供使用的选择:
TEMPLATE = app
A> app -创建一个应用程序的makefile。这是默认值,因此若是模板没有被指定,这个将被使用。
B> lib - 创建一个库的makefile。
C> vcapp - 创建一个应用程序的VisualStudio项目文件。
D> vclib - 创建一个库的VisualStudio项目文件。
E> subdirs -这是一个特殊的模板,它能够建立一个可以进入特定目录而且为一个项目文件生成makefile而且为它调用make的makefile。


#指定生成的应用程序放置的目录
DESTDIR += ../bin

#指定生成的应用程序名
TARGET = pksystem

#配置信息
CONFIG用来告诉qmake关于应用程序的配置信息。

    CONFIG+= qt warn_on release

在这里使用“+=”,是由于咱们添加咱们的配置选项到任何一个已经存在中。这样作比使用“=”那样替换已经指定的全部选项是更安全的。
A> qt部分告诉qmake这个应用程序是使用Qt来连编的。这也就是说qmake在链接和为编译添加所需的包含路径的时候会考虑到Qt库的。
B> warn_on部分告诉qmake要把编译器设置为输出警告信息的。
C> release部分告诉qmake应用程序必须被连编为一个发布的应用程序。在开发过程当中,程序员也能够使用debug来替换release


#指定uic命令将.ui文件转化成ui_*.h文件的存放的目录
UI_DIR += forms

#指定rcc命令将.qrc文件转换成qrc_*.h文件的存放目录
RCC_DIR += ../tmp

#指定moc命令将含Q_OBJECT的头文件转换成标准.h文件的存放目录
MOC_DIR += ../tmp

#指定目标文件(obj)的存放目录
OBJECTS_DIR += ../tmp

#程序编译时依赖的相关路径
DEPENDPATH += . forms include qrc sources

#头文件包含路径
INCLUDEPATH += .

#qmake时产生的信息,【

a读取变量a的字符串】,【

(PATH)读取环境变量PATH】
#message($$(PATH))

 

#源文件编码方式
CODECFORSRC = GBK

#工程中包含的头文件
HEADERS += include/painter.h
#工程中包含的.ui设计文件
FORMS += forms/painter.ui
#工程中包含的源文件
SOURCES += sources/main.cpp sources/painter.cpp
#工程中包含的资源文件
RESOURCES += qrc/painter.qrc

 

LIBS += -L folderPath  //引入的lib文件的路径  -L:引入路径

Release:LIBS += -L folderPath // release 版引入的lib文件路径

Debug:LIBS += -L folderPath // Debug 版引入的lib 文件路径

DEFINES += XX_XX_XXX  //定义编译选项,在.h文件中就能够使用 :#ifdefine xx_xx_xxx

RC_FILE = xxx.icns

7. 平台相关性处理
咱们在这里须要作的是根据qmake所运行的平台来使用相应的做用域来进行处理。为Windows平台添加的依赖平台的文件的简单的做用域看起来就像这样:

win32 {
SOURCES += hello_win.cpp
}
====================================================================================================================
当你已经建立好你的项目文件,生成Makefile就很容易了,你所要作的就是先到你所生成的项目文件那里而后输入:

Makefile能够像这样由“.pro”文件生成:

    qmake -oMakefile hello.pro

对于VisualStudio的用户,qmake也能够生成“.dsp”文件,例如:

    qmake -tvcapp -o hello.dsp hello.pro

===============================================================

 

在用Qt进行嵌入式linux开发时,有时为了调试便利,桌面版linux环境也会配置一份,这样在编译时就会调用不一样版本的库。qmake提供不少功能强大的内置函数和变量,为动态编译项目提供了便利。

 方式一:使用contains()

  1. DEFINES += RUN_ON_EMBEDDEDSYSTEM  
  2.   
  3. if(contains(DEFINES,RUN_ON_EMBEDDEDSYSTEM)){#contains和{必须在同一行,不然报错  
  4.   
  5. INCLUDEPATH +=  /root/802/trunk/dsp/c6accel_1_01_00_07/soc/packages \  
  6.                 /root/802/trunk/dsp/codec-engine_2_26_02_11/packages \  
  7.                 /root/802/trunk/dsp/framework-components_2_26_00_01/packages \  
  8.                 /root/802/trunk/dsp/dsplink_1_65_01_05_eng/packages \  
  9.                 /root/802/trunk/dsp/dsplink_1_65_01_05_eng \  
  10.                 /root/802/trunk/dsp/xdais_6_26_01_03/packages \  
  11.                 /root/802/trunk/dsp/linuxutils_2_26_02_05/packages \  
  12.                 /root/802/trunk/dsp/local-power-manager_1_24_03_10_eng/packages \  
  13.                 /root/802/trunk/dsp/codecs-omap3530_4_02_00_00/packages \  
  14.                 /root/802/trunk/tools/xdctools_3_16_03_36/packages \  
  15.                 /root/802/trunk/dsp/c6accel_1_01_00_07/soc/c6accelw \  
  16.                 /root/802/trunk/dsp/dmai_2_20_00_15/packages \  
  17.                 /root/802/trunk/app/ortp-0.24.2/include \  
  18.                 /root/802/trunk/app/ffmpeg-2.8.2  
  19.   
  20. LIBS += /usr/lib/libjthread.so \  
  21.         /usr/lib/libjrtp.so \  
  22. }else{  
  23. LIBS+= /usr/local/lib/libjthread.so \  
  24.        /usr/local/lib/libjrtp.so \  
  25.        /usr/local/lib/libavdevice.so\  
  26.        /usr/local/lib/libavcodec.so\  
  27.        /usr/local/lib/libavfilter.so\  
  28.        /usr/local/lib/libavformat.so\  
  29.        /usr/local/lib/libavutil.so\  
  30.        /usr/local/lib/libpostproc.so\  
  31.        /usr/local/lib/libswresample.so\  
  32.        /usr/local/lib/libswscale.so\  
  33. }  

方法二:使用CONFIG 

        CONFIG 变量用于指定工程配置和编译器选项,一般取debug,release,dll等值,也能够自定义选项值, CONFIG变量的每一个选项均可以用于条件判断。

  1. CONFIG += qt5    
  2.     
  3. qt5{    
  4. LIBS += -lmydll_qt5    
  5. }else{    
  6. LIBS += -lmydll    
  7. }  
相关文章
相关标签/搜索