转自:http://blog.youkuaiyun.com/adriano119/article/details/5878169
在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时产生的信息,【
#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
++++++++++++++++++++++++一个PRO文件实例++++++++++++++++++++++++++++++++++++++++
TEMPLATE = app #模块配置
LANGUAGE = C++ #C++语言
CONFIG += qt warn_on debug release
#引入的lib文件,用于引入动态链接库
LIBS += qaxcontainer.lib
#头文件包含路径
INCLUDEPATH += ../../qtcompnent/qtchklisten/inc ../../qtcompnent/qtclearfile/inc ../../validator/inc/validerrcode ../../qtcompnent/qtdir/inc ../inc ../../utillib/inc/xmlapi ../../utillib/inc/util ../../xercesc ../../qtcompnent/qteditor/inc ../../qtcompnent/qtfunreview/inc ../../qtcompnent/qttable/inc ../../qtcompnent/qtversion/inc ../../qtcompnent/qtini/inc ../../icdtool/icdservices/inc ../../icdtool/dataset/inc ../../icdtool/doi/inc ../../icdtool/reportcontrol/inc ../../icdtool/GSEconctrol/inc ../../icdtool/inputs/inc ../../icdtool/SMVconctrol/inc ../../icdtool/logcontrol/inc ../../scdpreview/inc/scdpreviewtoollib ../../scdpreview/form ../../icdtool/sclcontrol/inc ../../icdtool/log/inc ../../icdtool/settingcontrol/inc ../../qtcompnent/qteditor/inc ../../qtcompnent/qttreeview/inc ../../qtcompnent/qttabwidget/inc ../../communication/inc ../../qtcompnent/qtabout/inc ../iedmanage/inc ../ldmanage/inc ../foriecrun/inc ../../qtcompnent/validset/inc
#工程中包含的头文件
HEADERS += ../inc/exportstable.h /
../inc/maintabwidget.h /
../inc/outputtab.h /
../inc/strutil.h /
../inc/treeeditview.h /
../inc/MainForm.h /
../inc/recenfileini.h /
../inc/ExportCIDFunction.h
#工程中包含的源文件
SOURCES += ../src/main.cpp /
../src/exportstable.cpp /
../src/maintabwidget.cpp /
../src/outputtab.cpp /
../src/treeeditview.cpp /
../src/MainForm.cpp /
../src/recenfileini.cpp /
../src/ExportCIDFunction.cpp
#工程中包含的.ui设计文件
FORMS = ../form/scdmainform.ui /
../form/exportiedform.ui /
../form/Exportsedform.ui /
../form/Importsedform.ui /
../form/formiminputs.ui
#图像文件
IMAGES = images/substation.png /
images/communication.png /
images/autocom.png /
images/reportcfg.png /
images/comcfg.png /
images/filetrans.png /
images/review.png /
images/setting.png
#工程中包含的资源文件
RESOURCES = Scintilla.qrc
#CONFIG -= release
CONFIG -= debug
RC_FILE = scdtool.rc
BINLIB = ../../bin ../../xercesc/lib
UI_HEADERS_DIR = ../inc # .ui文件转会为**.h 存放的目录
UI_SOURCES_DIR = ../src # .ui文件转会为**.cpp 存放的目录
QMAKE_LIBDIR = $${BINLIB}
release {
TARGET = scdtool #指定生成的应用程序名
OBJECTS_DIR = ../../obj/scdtool/release #指定目标文件(obj)的存放目录
}
debug {
TARGET = scdtool_d #指定生成的应用程序名
OBJECTS_DIR = ../../obj/scdtool/debug #指定目标文件(obj)的存放目录
}
MOC_DIR = $${OBJECTS_DIR}
DESTDIR = ../../bin #指定生成的应用程序放置的目录
转自:http://blog.163.com/hu_cuit/blog/static/122849143201127104232142/
我也才开始学习QT的菜鸟。但是前几天有同学叫我给他讲一下QT的基本的编程。在过程中我发现了自己的不足,这个要改进。因为我相信我会变成老鸟的。当然我发现同学对QT的工程文件不是很了解,又恰好我以前研究过,看过一些资料,但又想到可以也有和我一样的菜鸟的同志们。所以我打算Share一下我对QT中一些文件的认识。借此希望和大家一起进步,一起变成老鸟!
1. *.pro文件
相信学习过QT的同志们,应该自己写了一个最简单的Hello程序。同时也就开始使用了一个命令:qmake –project 。这个命令是用来生成QT的工程文件(.pro)的,这个文件是用来设置编译或者链接的变量,以便用qmake生成相对应的Makefile文件。这个文件的基本内容就是:
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
# Input
SOURCES += main.cpp
下面我们就通过这个文件一步一步认识.pro这个文件:
TEMPLATE:这个变量是用来定义你的工程将被编译成什么模式。怎么说呢,TEMPLATE=app 表示这个project将被编译成一个应用程序(application)。如果没有这个设置,系统将默认编译为application。当然TEMPLATE还有其他的值:lib(生成库的Makefile) ,subdirs(生成有多级目录管理的Makefile),vcapp,vclib,vcsubdirs(对应Windows 下面VC)。
TARGET:生成最后目标的名字。
如果要指定生成目标的路径,这加一个DESTDIR(这个用来指定路径)。
DEPENDPATH:工程的依赖路径。
INCLUDEPATH:这个用来指定工程要用到的头文件路径。
一般是自定义的或者没有放入系统头文件路径的头文件。
SOURCES:工程需要的源文件。
介绍到这里也许你对Pro文件就有一个大概的认识了,但是这还不够,这仅仅只是开始。
比如如何架子资源啊,如何加载语言啊,如何加载ui啊,如何找到图标啊等。
当然除了上面的QT变量外,还有另外的变量,这里只介绍常用的:
HEADERS:工程所需要的头文件。
FORMS:工程要用到的ui文件。(ui文件时用QT设计器生成的)。
LIBS:加载动态库。LIBS +=./mitab/libmitab.so。
TRASHLATIONS:加载要用到的语言翻译*.ts文件。
RESOURCES:加载要用到的资源*.qrc文件。
win32:RC_FILE:加载要用到rc文件(这个只能用在Windows环境)。可以用来配置图标。
CONFIG:告诉qmake应用程序的配置信息。这个变量可以用来指定是生成debug模式还是release模式,也可以都生成。也可以用来打开编译器警告或者关闭。还可以用来配置要Qt加载库。
Eg:
CONFIG +=debug_and_release
CONFIG(debug, debug|release){
TARGET = hello
DESTDIR = ./debug
}else{
TARGET = hello
DESTDIR = ./release
}
如果要加载qt的库和你想要多线程:CONFIG +=qt thread
如果你要在windows下面运行console:CONFIG +=console
QT:用来加载指定的库名,如:xml等,当时前提是要在CONFIG中配置qt值(如上)。
Eg:
QT += xml network
UI_DIR:UIC将ui转化为头文件所存放的目录。
RCC_DIR:RCC将qrc文件转化为头文件所存放的目录。
MOC_DIR:MOC命令将含Q_OBJECT的头文件转换为标准的头文件存放的目录。
OBJECTS_DIR:生成的目标文件存放的目录。
最后,因为QT是跨平台的,所以我们在不同的平台上用同一个pro文件,这要加入有关平台的信息。在windows是win32,Linux平台是unix。
Eg:
在Windows和Linux的动态库文件格式是不一样的。一个是lib文件一个是so文件。
win32:LIBS += ./mitab/mitab_i.lib
unix:LiBS += ./mitab/libmitab.so
eg:
win32 {
SOURCES += hello_win.cpp //win平台
}
unix {
SOURCES += hello_win.cpp //unix/linux平台
}