最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

Qt pro写法

来源:动视网 责编:小OO 时间:2025-09-27 06:04:44
文档

Qt pro写法

在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下:1.注释从“#”开始,到这一行结束。2.模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:TEMPLATE =appA>app-建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。B>lib-建立一个库的makefile。C>vcapp-建立一个应用程序的VisualStudio项目文件。D>vclib-建立一
推荐度:
导读在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下:1.注释从“#”开始,到这一行结束。2.模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:TEMPLATE =appA>app-建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。B>lib-建立一个库的makefile。C>vcapp-建立一个应用程序的VisualStudio项目文件。D>vclib-建立一
在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

++++++++++++++++++++++++一个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

#图像文件

#工程中包含的资源文件

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    #指定生成的应用程序放置的目录

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

1.简介:

  qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。是qt工具包的一部分.在Unixstdio.h>

  int main(int argc, char** argv)

  {

  printf("Hello, world!\\n");

  return 0;

  }

  创建qmake需要的项目文件(hello.pro),

  SOURCES = hello.cpp

  CONFIG += qt warn_on release

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

  qmake -o Makefile hello.pro

  现在你的目录下已经产生了一个 Makefile 文件,输入"make" 指令就可以开始编译 hello.c 成执行文件,执行 ./hello 和 world 打声招呼吧!打开这个Makefile文件看看,是不是很专业啊!

  

  4.高级操作技巧

  当然,在实际使用过程中,我们的工程不可能象这个程序这样简单的,它可能有多个目录,多个头文件,多个源文件,需要链接器它不同的链接库等等情况。别急,让我和你慢慢道来。这些都是非常容易用qmake来实现的。我们从一个更加复杂的项目文件为例和你详细的讲诉qmake的高级技巧:

  项目文件示例:

  SOURCES += myqt.cpp

  SOURCES += main.cpp

  HEADERS += myqt.h

  FORMS += xsimform.ui

  TEMPLATE = lib

  CONFIG += debug warn_on qt thread x11 plugin

  TARGET = ../bin/panel_qt

  INCLUDEPATH = ../../../../xsim ../../../../xsim/IMdkit

  DEFINES = BDB_VERSION4 OS_LINUX

  从这个文件可以知道,SOURCES变量指向项目中的源文件,当项目中有多个源文件时,我们需对项目中的每一个源文件都这样做,直到结束:

 

  SOURCES += hello.cpp

  SOURCES += main.cpp

  当然,如果你喜欢使用像Make一样风格的语法,你也可以写成这样,一行写一个源文件,并用反斜线结尾,然后再起新的一行:

  SOURCES = hello.cpp main.cpp

  HEADERS变量指向项目中的头文件,多个头文件的时候,和多个源文件的解决方法一致。

  FORMS变量指向项目中使用到的窗体文件(qtdesign设计的.ui文件),qmake也注意了Qt的特殊需求,可以自动的包含moc和uic的连编规则。没有的话或者非qt程序可以不写。

  TEMPLATE变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:

  app - 建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。

  lib - 建立一个链接库的makefile。

  vcapp - 建立一个应用程序的Visual Studio项目文件。

  vclib - 建立一个库的Visual Studio项目文件。

  subdirs - 这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的mkefile。

  CONFIG变量变量指定了编译器所要使用的选项和所需要被连接的库。配置变量中可以添加任何东西,但只有下面这些选项可以被qmake识别。

 

  下面这些选项控制着使用哪些编译器标志:

  release - 应用程序将以release模式连编。如果"debug"被指定,它将被忽略。

  debug - 应用程序将以debug模式连编。

  warn_on - 编译器会输出尽可能多的警告信息。如果"warn_off"被指定,它将被忽略。

  warn_off - 编译器会输出尽可能少的警告信息。

  下面这些选项定义了所要连编的库/应用程序的类型:

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

  thread - 应用程序是一个多线程应用程序。

  x11 - 应用程序是一个X11应用程序或库。

  windows - 只用于"app"模板:应用程序是一个Windows下的窗口应用程序。

  console - 只用于"app"模板:应用程序是一个Windows下的控制台应用程序。

  dll - 只用于"lib"模板:库是一个共享库(dll)。

  staticlib - 只用于"lib"模板:库是一个静态库。

  plugin - 只用于"lib"模板:库是一个插件,这将会使dll选项生效。

  TARGET变量指定生成的二进制代码的路径和文件名,如果建立的是一个链接库的话,它会在文件名前面自动加上"lib"和在最后自动加上".so".

  我们在使用过程中可能会使用到另外的一些函数库,链接库等。函数库的头文件指定使用INCLUDEPATH变量,其它链接库的指定可以通过LIBS 变量来指定,例LIBS += -lmath -L/usr/local/lib

  DEFINES变量的指定就如同make的-D选项一样。

  

  结束语

  Autoconf 和 Automake 功能十分强大,但对于普通用户来说,太过复杂。qmake方便、简单、快捷,是一个轻量级的makefile生成工具,虽然它是qt工具包的一部分,但它也完全可以用来进行其它程序makefile文件的生成,对于大多数人来说,它已经是非常的够用了。你也可以从qt提供的许多现存的源程序中找到相关的.pro项目文件,它们是学习qmake 更多技巧的最佳范例。

QT工程pro设置实践(with QtCreator)----非弄的像VS一样才顺手?

相信大家很多和我一样,用多了微软给的便利,用人家的就十分不习惯.于是就琢磨原来用到的功能现在要整顺手来,不然可让人怎么活啊! 本篇主要介绍实践使用,并非一篇完整教程,有待读者补充.^_^

我们原本在VS上有一个大工程sln,里面有lib,有dll有exe,甚至还混搭了C#.用起来一点不觉得水土不服.现在要用QT重整,并且需要处处考虑换个平台不要让我改东西.作为探路先锋,先挑了几个基础工程出来做实验:

↑当然,图中是已经成事之后了.想在qtcreator中弄一个工程集还真不是那么方便,我到处找过了,压根没有创建工程集的办法.纵使你可以一个pro一个pro的拖进去,最后也没法保存,下次打开还得重新一个一个pro的拖,没哪个傻蛋总这么干吧..所以首先就是要手动创建一个subdirs型的pro做为工程集,也就是上面看到的

**CloudBoard_win32.pro**(subdirs举例)

TEMPLATE = subdirs

SUBDIRS =\

raknet\

onetengine \

omisc \

testDebugShow

onetengine.depends = raknet omisc

testDebugShow.depends = omisc

#CONFIG += ordered

关于这个pro的详细写法,感觉qt文档写的很细碎,反正我是没看明白.就着广大网友的例子才有了上面一段.TEMPLATE=subdirs这是固定写法,声明是做工程集目录的.SUBDIRS是指明目录中有哪些项,可以嵌套另一个subdirs型的pro. 接下来可以详细定义其中的项目.如.depends表示左边的依赖=后面的项目.

 .subdir 

指定子项的目录,不使用子项本身的名字. 
 .file 明确指定该子项使用的pro文件,默认是根据名字自动找的,该项不和.subdir同时使用 

.condition Specifies a bld.inf define that must be true for subproject to be built. Available only on Symbian platform. 
.depends 该子项依赖指定的子项,只在使用makefiles的平台有效

.makefile 

该子项的makefile,只在使用makefiles的平台有效 

.target 该子项的TARGET,只在使用makefiles的平台有效 

以上翻译可能有问题.重新总结一下.使用subdirs =a b c d声明的其实是4个子项的名字.默认你不多做说明的话,qmake根据名字自动去找子目录,启用子目录中的pro文件(名字优先匹配).如果你特别说明a.subdir=./z或者a.file=./z/z.pro就可以不受名字. 至于.makefile,应该是你混用第三方库的时候才有必要手动指定使用的makefile. target可以在子pro中指定,除非你觉得这里比较统一方便修改.其余的未实践不多说.

**omisc.pro**(staticlib举例)

QT -= gui ①

TARGET = misc ②

TEMPLATE = lib #固定写法

CONFIG += staticlib #静态库固定写法

#DEFINES += ③

DESTDIR = $$_PRO_FILE_PWD_/../lib ④

SOURCES += \

ostatic.cpp \

odebugoutput.cpp

HEADERS += omisc.h \

ostatic.h \

ostringmap.hpp \

odebugoutput.h

unix:!symbian { ⑤

maemo5 {

target.path = /opt/usr/lib

} else {

target.path = /usr/lib

}

INSTALLS += target

}

①"QT"是使用的QT库,从平时向导创建工程可以看出,QT默认是包含gui和core,如果你不用,他自动生成的就是

QT-=core gui.此处QT-=gui表示我们还用了core

②TARGET是生成目标,名字不做修饰(不加.a/.lib/.dll)的好处是让qt帮我们加,在不同平台不用我们考虑差别.

同时这里的名字是可以前置路径的,如../lib/misc.它会生成在相对生成目录上一级的lib下.不过我劝你还是不要写相对路径了,因为在windows下会多出debug/release目录,目录深度不同,你换一个平台得重写.这还有更好的办法,后面继续.

③DEFINES是VS里面的预定义头,就是定义宏,哎哟总算见着熟人了~

④DESTDIR就是刚才②说的好办法.它控制最终的输出,相当于VS的OurDir.此处我们控制它输出到$$_PRO_FILE_PWD_/../lib.前面$$开头的是一个pro变量,存放的是工程路径,就是CloudBoard_win32.pro的路径,还有更多的定义参考Qt助手. 你可以用类似message($$_PRO_FILE_)的语句测试变量到底是什么值.具体使用是:写在pro中,右键pro的工程执行qmake.从编译输出中可以看到.

⑤最后这段是自动产生的,本人实在没有仔细研究,看样子应该是一种指定target目录的办法.而unix:!symbian让人不难想到,这是在筛选特定平台.具体的欢迎您测试后补充^_^

raknet相信很多童鞋了解,本案简单将其代码编译成staticlib,DESTDIR=$$_PRO_FILE_PWD_/../lib完工

**onetengine.pro**(动态库举例)

!include( ../common.pri ) { ①

error(" Couldn't find the common.pri file! ")

}

QT -= gui

QT += network xml

TARGET = netengine

TEMPLATE = lib

DESTDIR = ../bin #基于生成目录

INCLUDEPATH += ../omisc ../raknet/source ②

DEPENDPATH += ../omisc ../raknet/source #基于工程目录

win32:LIBS += -lWs2_32 ③

LIBS += -lmisc -lraknet

DEFINES += ONETENGINE_LIBRARY ④

SOURCES += onetengine.cpp \

netengine_export.cpp

HEADERS += onetengine.h\

onetengine_global.h \

../include/macrodefine.h \

../interface/isinkfornetengine.h \

../interface/inetengine.h

**common.pri**(pro包含举例)

INCLUDEPATH += ../interface ../include ⑤

#LIBS += -L$$QTDIR/lib

LIBS += -L../../src/lib

LIBS += -L../lib

①没错,pro中也是可以include的,以当前文件为起点将上一层的common.pri包含进来.common.pri中的相对路径依然以当前pro路径为基础.

②INCLUDEPATH是包含目录,类似于VS中的附加包含目录.至于DEPENDPATH本人实事求是没有研究不明白有什么用.欢迎补充^_^

③使用筛选器,仅在win32下增加Ws2_32.lib的导入. LIBS相当于VS中的附加依赖库,不同的是可以通过-L指定库目录,-l指定库名.其间没有空格的哦.例如上面的LIBS+=-L../lib -lmisc就是可以到../lib中找misc库.misc没有说明.a还是.lib是让qt帮我们做.你也可以指定.lib,然后通过筛选器把其他平台的也写一下.

④提供宏定义ONETENGINE_LIBRARY是因为在向导创建动态库的时候qtcreator帮我们定义了这样的

#ifndef ONETENGINE_GLOBAL_H

#define ONETENGINE_GLOBAL_H

#include 

#if defined(ONETENGINE_LIBRARY)

# define ONETENGINESHARED_EXPORT Q_DECL_EXPORT

#else

# define ONETENGINESHARED_EXPORT Q_DECL_IMPORT

#endif

#endif // ONETENGINE_GLOBAL_H

提供宏定义ONETENGINE_LIBRARY决定了该工程的作用是导出动态库的.

⑤最后common.pri只是定义了几项公共的没有平台差异的信息

好了,testDebugShow的工程pro就不多说了,它和动态库的很相似,只有TEMPLATE=app没有XXXX_LIBRARY的宏定义而已.

最后补充一点,为什么总的工程名要叫CloudBoard_win32呢,明眼人一看就知道这是要分平台了呢.没错,一开始我也觉得一个pro就搞定了,里面可以有筛选器,一份pro足以应付.但是实际是qtcreator会为pro产生同名的.user文件,qtcreator的一些配置会写在.user里面,例如最关键的qtSDK位置,编译工具,构建/生成设置等.这些必须根据生成所处的环境区别设置. 所以当你原样跑到Linux下,启动pro就会告诉你配置是别处读来的,是否使用?是:配置一定是错的,否:配置被清洗.这都不是我们希望的.所以唯有分平台建总pro了.

尊重原创,尊重知识产权,从我做起.@2013/01/09

本文感谢众多网贴,不过因为大片雷同,我也不知道原作者究竟是谁.

对一搜一大片全部雷同文章的现状很烦恼,很浪费时间.倡议大家多做总结,分享消化提炼后的有用知识!

文档

Qt pro写法

在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下:1.注释从“#”开始,到这一行结束。2.模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:TEMPLATE =appA>app-建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。B>lib-建立一个库的makefile。C>vcapp-建立一个应用程序的VisualStudio项目文件。D>vclib-建立一
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top