欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

QT中.pro文件的写法

程序员文章站 2022-04-14 15:32:48
在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下: 1. 注释 从“ ”开始,到这一行结束。 2. 指定源文件 SOURCES = .cpp 对于多源文件,可用空格分开,如:SOURCES = 1.cpp 2.cpp3.cpp 或者 ......

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

1. 注释

从“#”开始,到这一行结束。

2. 指定源文件

sources = *.cpp

对于多源文件,可用空格分开,如:sources = 1.cpp 2.cpp3.cpp
或者每一个文件可以被列在一个分开的行里面,通过反斜线另起一行,就像这样:

sources = hello.cpp
main.cpp
一个更冗长的方法是单独地列出每一个文件,就像这样:

sources+= hello.cpp
sources +=main.cpp

这种方法中使用“+=”比“=”更安全,因为它只是向已有的列表中添加新的文件,而不是替换整个列表。

3. 指定头文件

headers = hello.h或者headers += hello.h

列出源文件的任何一个方法对头文件也都适用。

4. 配置信息

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

config+= qt warn_on release

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

5. 指定目标文件名

target = filename

如果不设置该项目,目标名会被自动设置为跟项目文件一样的名称

6. 添加界面文件(ui)

interfaces = filename.ui

7. 平台相关性处理

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

win32 {
sources += hello_win.cpp
}

所以如果qmake运行在windows上的时候,它就会把hello_win.cpp添加到源文件列表中。如果qmake运行在其它平台上的时候,它会很简单地把这部分忽略。

8. 如果一个文件不存在,停止qmake

如果某一个文件不存在的时候,你也许不想生成一个makefile。我们可以通过使用exists()函数来检查一个文件是否存在。我们可以通过使用error()函数把正在运行的qmake停下来。这和作用域的工作方式一样。只要很简单地用这个函数来替换作用域条件。对main.cpp文件的检查就像这样:

!exists( main.cpp ) {
error( "no main.cpp file found")
}

“!”用来否定这个测试,比如,如果文件存在,exists( main.cpp)是真,如果文件不存在,!exists( main.cpp )是真。

9. 检查多于一个的条件

假设你使用windows并且当你在命令行运行你的应用程序的时候你想能够看到qdebug()语句。除非你在连编你的程序的时候使用console设置,你不会看到输出。我们可以很容易地把console添加到config行中,这样在windows下,makefile就会有这个设置。但是如果告诉你我们只是想在当我们的应用程序运行在windows下并且当debug已经在config行中的时候,添加console。这需要两个嵌套的作用域;只要生成一个作用域,然后在它里面再生成另一个。把设置放在最里面的作用域里,就像这样:

win32 {
debug {
config += console
}
}

嵌套的作用域可以使用冒号连接起来,像这样:

win32:debug {
config += console
}

10. 摸板

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

a> app -建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。
b> lib - 建立一个库的makefile。
c> vcapp - 建立一个应用程序的visualstudio项目文件。
d> vclib - 建立一个库的visualstudio项目文件。
e> subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。

11. 生成makefile

当你已经创建好你的项目文件,生成makefile就很容易了,你所要做的就是先到你所生成的项目文件那里然后输入:

makefile可以像这样由“.pro”文件生成:

qmake -omakefile hello.pro

对于visualstudio的用户,qmake也可以生成“.dsp”文件,例如:

qmake -tvcapp -o hello.dsp hello.pro

我们在编译qt的工程的时候,一般都会让qmake自动生成,但有时我们需要定制我们的工程,那么就必须改写pro文件。

要自己全部写pro文件又有点麻烦,所以,一般都是先运行

  qmake -project

来生成基本的pro文件。

例如你有一个工程目录为backup,那么在这个目录下就会生成backup.pro文件。

对一般的工程,我们只需要修改几个基本的常用的选项,下面说说怎么修改。

假设我们有个目录,名字为backup。下面有a.h,a.cpp,b.h,b.cpp,main.cpp等文件。

首先我们可以在backup目录下运行qmake -project生成backup.pro文件。

888888888888888888888888888888888888888888888888888888888888888888

第一种常用方式:

模块设置,一般设置为app(生成应用程序,默认),subdirs(生成makefile文件编译subdirs指定的子文件夹),lib(生成库文件)

template = app

指定生成的应用程序放置的目录

destdir += ../bin

指定生成的应用程序名

target = pksystem

添加或减少config的配置模块,一般采用默认即可,但是除去debug_and_release模块不会生成debug和release文件夹

config += release

config -= debug_and_release

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

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

指定moc命令将含q_object的头文件转换成标准.h文件的存放目录

moc_dir += ../tmp

指定目标文件的存放目录

objects_dir += ../tmp

程序编译时依赖的相关路径

dependpath += . forms include qrc sources

头文件包含路径

includepath += .

qmake时产生的信息,\[{a}读取变量a的字符串,\](path)读取环境变量path

message($$(path))

源文件编码方式

codecforsrc = gbk

input

工程中包含的头文件

headers += include/painter.h

工程中包含的.ui设计文件

forms += forms/painter.ui

工程中包含的源文件

sources += sources/main.cpp sources/painter.cpp

工程中包含的资源文件

resources += qrc/painter.qrc

第二种常用方式,用于子文件夹的编译:

设定模块为子文件夹编译方式

template = subdirs

子文件夹目录,可用\换行

subdirs = src1 src2

在backup.pro里已经包含了几个基本的选项,如
template,target,includepath,heads,sources等选项。

下面说明一下几个经常修改的选项。

heads:

我们工程中头文件如下:

heads += a.h
b.h

sources:

我们工程中的cpp文件,如下:

sources += a.cpp

                       b.cpp \


                       main.cpp

上面的两个选项的文件分行是用反斜线\来分行,最后一个不用,如果是同一行的文件可以空格分开,我们在执行qmake -project的时候,qmake已经自动帮我们写上了,省去我们这些麻烦,不过以后要增加文件可以在这里增加。

includepath:

这个选项可以指定我们#include语句要包含头文件的目录,如果你有其它的不在当前目录的头文件需要包含进来,并又不想在自己的源文件中使用绝对路径或相对路径来包含头文件,那么我就可以在这里把这个头文件所在的路径包含进来,例如在backup目录的兄弟目录里有个目录为image的目录,里面有个头文件为image.h,我们的b.h里要用到,因此我们在backup.pro文件中设置includepath为

 includepath += ../image

这样,我们在b.h里只需要#include "image.h"就可以了。

config:

config经常用到的一个是就是设置release版本或是debug或是release和debug的版本信息。如果我们要调试可以这样设置。

config += debug

或config += release (release版本)

下面是config的几个版本的选项:

release the project is to be built in release mode. this is ignored if debug is also specified.
debug the project is to be built in debug mode.
debug_and_release the project is built in both debug and release modes. this can have some unexpected side effects (see below for more information).
build_all if debug_and_release is specified, the project is built in both debug and release modes by default.
ordered when using the subdirs template, this option specifies that the directories listed should be processed in the order in which they are given.
precompile_header enables support for the use of precompiled headers in projects.
warn_on the compiler should output as many warnings as possible. this is ignored if warn_off is specified.
warn_off the compiler should output as few warnings as possible.

libs:

这里可以选择我们要包含的库,例如我们的工程要用到libz.so的一个压缩库,我可以怎么写:

libs += -lz

或是用到我们image目录下的libimage.so库,那么可以这么写:

libs += -l../image/image




defines:

defines又是我们一个常用的定要,它相当于我们用gcc的-d定义。例如,我们的backup工程需要对大文件进行读写就可以这样定义:

defines += _largefile64_source _file_offset_bits=64

resources:

定义我们的资源描述文件,我们工程里需要很多图片,那么这些图片的定义都可以放在backup.qrc文件中进行描述,那么这里就可以指出我们的qrc文件。

resources += backup.qrc

target:

这个选项可以让我们定义我们生成的目标文件的名字,例如我们执行我们这个backup工程是默认生成backup的执行文件,但我们想让我们的执行的文件名为abcbackup,我们就可以这样写

target = abcbackup

objects_dir:

      一般我们在编译我们的工程的时候会生成许多的中间文件,如.o文件(linux下)或.obj(windows下),这样我们的工程就很乱,所以我们可以定义这个选择,我们可以这样定义:

objects_dir += ./objs

这样,我们的这些中间文件就全都在backup/objs目录下了

  一般,我们不会在我们的工程里直接编译,这样的话,工程比较乱,我们可以在backup目录下建立一个目录,为bakcup-build目录,我们在这个目录下编译,这样其他的临时文件就在这个目录下,这样我们的工程看起来就不会那么乱了。

  我们进入bakcup-build目录,然后运行

         qmake -o makefile ../bakcup.pro

  这样我们就在当前目录下生成了一个makefile。在这个目录下执行make就可以生成我们的abcbackup可执行程序了

转自: