怎么不让别人复制文件让.pro文件中的QMAKE

浅谈qmake之pro、pri、prf、prl文件
尽管每次和cmake对比起来,我们总是说 qmake 简单、功能少。但是qmake仍然是一个非常复杂的东西,我想大多人应该和我一样吧:
不是太清楚CONFIG等变量到底如何起作用的
用过的qmake内置变量和函数不超过20个
看Qt Creator源码或者QtSolution等库中自己使用的 *.pro 文件就想看天书一样
本文只能抓住一条线,简单介绍一下 *.pro、*.pri、*.prf、*.prl等四种文件:干嘛用的,如何用的
qmake 的工程(project)文件,这个大家肯定都非常熟悉了。那我就不费话了,上例子:
这是一个典型的Qt示例程序的.pro文件(propriprfprl.pro):
TEMPLATE = app
CONFIG += QT
QT += core gui
TARGET = propriprfprl
SOURCES += main.cpp/
widget.cpp
+= widget.h
+= widget.ui
前面3行是qmake的默认值,我们都可以省略
TARGET 这行指定工程名,我们也可以省略
i 是什么东西?包含(include)的首字母。类似于C、C++中的头文件吧,反正就是我们可以吧 *.pro 文件内的一部分单独放到一个 *.pri 文件内,然后包含进来。
接前面的例子,我们将源文件的设置独立出来,放到propriprfprl.pri文件内:
SOURCES += main.cpp/
widget.cpp
+= widget.h
+= widget.ui
这时,我们的 propriprfprl.pro 文件就可以简化为:
TEMPLATE = app
CONFIG += QT
QT += core gui
TARGET = propriprfprl
include(propriprfprl.pri)
这有什么用呢?对我们这个例子来说,确实没什么用,反而多了一个文件,更麻烦了。
可是,如果一个大点的项目,含有多个*.pro文件呢,这些pro需要有些共同的设置或需要的文件,这时就很有必要了。
f又是神马东东?特性(feature)的首字符
和pri文件类似,该文件也是要被包含进pro文件的
只是:它更隐蔽
你经常和它打交道,可能却一直视而不见
我们这个例子中其实已经用到了,这就是
CONFIG+=QT
当我们在CONFIG中指定一个东西时,qmake就会尝试去加载相应的feature文件:
Qt安装目录下的 mkspecs/features/qt.prf
features 文件的文件名必须小写
qmake 去哪些目录下搜索features文件呢?
manual中有介绍,此处略
暂时只知道前面提到的 $$QTDIR/mkspecs/features 就可以了
写一个自己的features文件:propriprfprl.prf
win32:CONFIG += console
为win32的程序添加控制台,有点多次一举哈。
将该文件放置到我们前面提到的目录中
然后在pro文件内添加
CONFIG += propriprfprl
看到和 CONFIG += console 同样的效果了吧?
注:我们也可以使用 load命令来加载prf文件,比如前面的命令可以认为等价于
load(propriprfprl)
l 这个东西容易理解,链接(link)的首字符。主要和生成与使用静态库密切相关(动态库也可以有该文件,去Qt安装目录下的lib目录下看看即可)。
生成静态库时,我们需要使用下列配置(进而生成和库文件同名的 *.prl 文件)
CONFIG += create_prl
当工程的TEMPLATE为app时,会自动添加如下指令(找库文件的时候,会尝试找相应的 *.prl 文件)
CONFIG += link_pri
那么该文件有什么用处呢?举一个大家可能熟悉的例子QextSerialPort1.2这个库(windows下的情况):
编译时,需要 setupapi.lib advapi32.lib user32.lib 这几个库文件
编译成静态库以后,它本身是不包含这3个库文件信息的
于是,当我们使用这个 QextSerialPort 静态库,还是需要指定 这几个库文件
如果有prl文件呢,该文件就会包含依赖信息了,我们看一下:
QMAKE_PRL_BUILD_DIR = E:/dbzhang800-qextserialport/buildlib
QMAKE_PRO_INPUT = buildlib.pro
QMAKE_PRL_TARGET = qextserialport-1.2
QMAKE_PRL_CONFIG = include_source_dir incredibuild_xge lex yacc warn_on uic resources incremental_off windows release ReleaseBuild Release build_pass qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe stl exceptions rtti mmx 3dnow sse sse2 release ReleaseBuild Release build_pass qt qextserialport-buildlib create_prl qextserialport-uselib qextserialport-static static debug_and_release build_all release ReleaseBuild Release build_pass no_autoqmake staticlib static moc thread
QMAKE_PRL_LIBS = setupapi.lib advapi32.lib user32.lib d://Qt//4.7.0//lib//QtGui4.lib d://Qt//4.7.0//lib//QtCore4.lib
qmake manual:qmake-advanced-usage.html
qmake manual:qmake-variable-reference.html
http://blog.csdn.net/wsh6759/article/details/7432269
Views(...) Comments()博客访问: 744828
博文数量: 357
博客积分: 12744
博客等级: 上将
技术积分: 4040
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
如果项目是xxx,则在xxx.pro文件中加入QMAKE_CXXFLAGS = -g
阅读(707) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。Qmake使用的pro文件的写法 - CSDN博客
Qmake使用的pro文件的写法
在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下:
从“#”开始,到这一行结束。
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平台添加的依赖平台的文件的简单的作用域看起来就像这样:
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}
TARGET = scdtool&&&&&& #指定生成的应用程序名
OBJECTS_DIR = ../../obj/scdtool/release #指定目标文件(obj)的存放目录
TARGET = scdtool_d&&&& #指定生成的应用程序名
OBJECTS_DIR = ../../obj/scdtool/debug #指定目标文件(obj)的存放目录
MOC_DIR = $${OBJECTS_DIR}
DESTDIR = ../../bin&&& #指定生成的应用程序放置的目录
本文已收录于以下专栏:
相关文章推荐
qmake介绍  qmake是用来为不同的平台的开发项目创建makefile的Trolltech开发一个易于使用的工具。qmake简化了makefile的生成,所以为了创建一个makefile只需要一...
qmake常用语法
一、注释:
  用“#”注释,表示到行尾均为注释。
二、include:
  包含别的文件,例如:include xx.pri。类似于c++的#include。。。...
尽管每次和cmake对比起来,我们总是说 qmake 简单、功能少。但是qmake仍然是一个非常复杂的东西,我想大多人应该和我一样吧:
不是太清楚CONFIG等变量到底如何起作用的用过的qmak...
1. 在控制台打开qmake.exe
2. 设置qmake选项为-project
path_to_qmake.exe -project
3. 设置msvc版本
set QMAKESPEC=win32-...
/fightiger/item/1b20f8c3ea8c6
关于qmake,好一段时间令我一头雾水,不知道用来干嘛的,只知道怎...
下面是转载的文章,强烈建议所有的Qt开发人员都看一遍。
学习到这篇文档是因为我想一次配置好pro文件,然后就能自动编译出debug和release的版本了。
其实关键就是
CONFIG +=...
在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下:
从“#”开始,到这一行结束。
2.模板变量告诉qm...
简单介绍一下Qt工程中, *.pro、*.pri、*.prf、*.prl 等四种文件:干嘛用的,如何用的。
qmake是用来为不同的平台的开发项目创建makefile的Trolltech开发一个易于使用的工具。qmake简化了makefile的生成,所以为了创建一个mak...
尽管每次和cmake对比起来,我们总是说 qmake 简单、功能少。但是qmake仍然是一个非常复杂的东西,我想大多人应该和我一样吧:
不是太清楚CONFIG等变量到底如何起作用的用过的qmak...
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)英文文档连接:
&由于qmake manual和overview& 两章的内容都不多就把它们放在一起翻译了出来
qmake 指南
&qmake 是帮助简化跨平台项目开发的构建过程的工具,qmake能自动生成Makefile,以至于只需要几行代码就可以创建相应的Makefile。无论是不是用Qt写的软件项目都可以使用用qmake
& & &qmak 根据工程文件的内容来生成Makefile。工程文件是被程序员创建的,通常都很简单,但是复杂的工程会创建复杂的工程文件
& & &qmake包含额外的功能支持Qt的开发,自动包含moc和uic的编译规则。
& & &qmake可以不用程序员改变工程文件而自动生成Microsoft Visual Studio工程文件
  上边这些是原文的连接,我会一一翻译过来下面是第一章内容& 概述的翻译
概述 overview
& & &qmak tool 工具提供给你一个管理应用程序,库,或者其它组件编译过程的导向系统。这个方法能够控件源文件 的使用,并允许在这个过程中的步骤被简单的描述,通常这些描述会在一个文件里。qmake&扩展每一个项目文件里的信息到makefile,用于执行编译和连接所必须的命令。描述一个项目
& & &项目(.pro)文件的内容用来描述项目,qmake使用文件里的信息生成包含构建每个项目所需的所有命令的makefile.项目文件一般包含源文件和头文件列表,一般配置信息和一些特定程序的描述,例如额外的库连接列表,或者使用额外的包含路径
& & &项目文件可以包含许多不同的元素,包含注释、变量声明、内置函数和一些简单的控制结构。在许多简单的项目里,只需要声明用来构建有一些基本配置选项的项目的源文件和头文件,更多关于如何创建简单项目文件的信息,请看
& & &你可以为复杂的项目创建更复杂的项目文件,项目文件的概述,请查看。你可以在项目文件中使用的数的变量和方法更详细的信息,请查看。
& & &你可以使用应用程序或库项目模板来指定专门的配置选项来微调构建过程,更多信息请查看&
& & &你可以用QtCreator的新建项目向导来创建项目文件。选择项目模板,Qt Creator会创建一个有默认变量的项目文件(.pro)允许你构建和运行项目.你可以根据你的意图去修改项目文件(.Pro).
& & &你也可以用qmake生成项目文件。更全面的qmake命令行参数描述,请参阅&。
& & &qmake的基本配置功能可以处理大多数的跨平台项目。然而,使用一些特定平台的变量也许会更有用或者是必须使用的,更详细的信息,请查看&.
& & &构建一个项目
& & &对于许多简单的项目,你只需在工程的顶层目录运行qmake就可以生成Makefile.然后,你可以根据makefile运行平台的make 工具构建项目。
& & &在配置构建过程时qmake使用的相关环境变量的详细信息,请查看&.
& & &使用第三方库
& &&指南为你展示如何在你的项目中使用简单的第三方库
&预编译头文件
& & &在大项目中,有可能会利用预编译头来提高构建过程。更详细的信息,请查看&
阅读(...) 评论()QT中的qmake详解_博客园
当前位置: >
>QT中的qmake详解
QT中的qmake详解
& 作者:风行雪舞 & 来源: 博客园-elect-fans &
 关于qmake,好一段时间令我一头雾水,不知道用来干嘛的,只知道怎么用,而且也只懂那么一两个命令,详细看过资料以后整理如下:
1.首先,感性的认识是,qmake可以利用源文件(包括头文件h,实现文件cpp,qt的ui文件等等)生成各种不同类型的工程,工程需要的Makefile文件,可执行的与不可执行的,这取决于所用的模板(包括app、lib、subdirs、vcapp、vclib)。
2.创建pro文件,添加各种源文件,还可以设定平台相关的不同源文件,设置各种规则,利用qmake命令生成工程。后面会介绍pro文件可以手工编写,也可以利用qmake命令智能的生成。
一般顺序是先创建.pro文件,然后由.pro文件生成Makefile文件,makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模 块及库等).创建程序(make程序)首先读取makefile文件,然后再激活编译器,汇编器,资源编译器和连接器以便产生最后的输出,最后输出并生成 的通常是可执行文件.创建程序利用内置的推理规则来激活编译器,以便通过对特定cpp文件的编译来产生特定的obj文件。
3.各种模板生成不同类型的工程,而每个模板可以用的qmake变量是不一样的:
app模板:编译一个可执行程序
选项        描述
windows     程序是Window平台的界面程序
console     App模板专用: 程序是Window平台控制台程序
当你使用这个模板,以下的一些qmake变量是能用的,你可以在pro文件使用这些变量来配置你的应用程序需要的相关的信息
HEADERS –程序中需要编译的头文件列表.
SOURCES -程序中需要编译的源文件列表.
FORMS – 由Qt Designer为程序创建的ui文件列表(qte2是INTERFACES).
LEXSOURCES – 程序用到的所有的lex 源文件列表.
YACCSOURCES -程序用到的所有的yacc 源文件列表.
TARGET –可执行程序的名字.默认是跟工程文件名一样 (根据不同的平台后缀名会自动添加).
DESTDIR –可执行文件的发布目录.
DEFINES – 程序编译时候需要的预定义的列表INCLUDEPATH –程序需要的头文件的目录列表.
DEPENDPATH –程序搜索的依赖路径.
VPATH – 查找supplied 文件的搜索路径(我还没有弄懂~_~).
DEF_FILE – Windows 平台专用: 程序需要用到的.def .
RC_FILE – Windows 平台专用: 程序的资源文件.
RES_FILE – Windows 平台专用: 程序需要连接的资源文件.
lib模板库:
lib模板告诉qmake生成的Makefile是将要编译一个库,使用这个模板的时候,此文来自: 马开东博客
转载请注明出处 网址:
相关阅读:
来源:(微信/QQ:,微信公众号:makaidong-com) &&&&&& 欢迎分享本文,转载请保留出处!
&&&&&& 【原文阅读】:
上一篇:没有了
【相关文章】
每日最新文章
每日最热文章
本周最热文章
本月最热文章
本年最热文章
Powered by
Copyright &
, All Rights Reserved

我要回帖

更多关于 怎么不让别人复制文件 的文章

 

随机推荐