qmake

一、qmake 介绍



qt creator 中的.pro文件里面的内容,通过qmake 来生成一个Makefile文件,来决定工程的一些属性与特性
1. 源文件与头文件
SOURECS  += hello.cpp \
UI/testdialog.cpp \
main.cpp
HEADERS  += hello.h \
UI/testdialog.cpp
FORMS   += widget.ui
2.  目标名字自动被设成与项目名相同
TARGET  += helloworld


3.  为了方便把qt的lib moc uic 等连编到Makefile中,需要加入
CONFIG  += qt
4. 使用qmake 生成Makefile文件
qmake -o Makefile hello.pro
然后make 或 nmake
如果想生成Visual Studio  .dsp or .vcproj 文件使用
qmake -tp vc hello.pro

5. 使应用程序可以调试
应用程序的发布版本不包含任何调试符号或者其它调试信息。在开发过程中,生成一个含有相关信息的应用程序的调试版本是很有用处的。通过在项目文件的CONFIG变量中添加“debug”就可以很简单地实现。
例如:
CONFIG += qt debug

6. 添加特定平台的源文件
根据平台的不同编写不同的代码。所以现在你有两个信文件要包含到你的项目文件中-hello_win.cpp和hello_x11.cpp。
我们不能仅仅把这两个文件放到SOURCES变量中,因为那样的话会把这两个文件都加到Makefile中。所以我们在这里需要做的是根据qmake所运行的平台来使用相应的作用域来进行处理。
为Windows平台添加的依赖平台的文件的简单的作用域看起来就像这样:


    win32 {
SOURCES += hello_win.cpp
    }

所以如果qmake运行在Windows上的时候,它就会把hello_win.cpp添加到源文件列表中。如果qmake运行在其它平台上的时候,它会很简单地把这部分忽略。在添加一个X11依赖文件的作用域。
当你做完了这部分,你的项目文件应该和这样差不多:


    CONFIG += qt debug

    SOURECS  += hello.cpp \
UI/testdialog.cpp \
main.cpp

HEADERS  += hello.h \
UI/testdialog.cpp

FORMS   += widget.ui

    win32 {
SOURCES += hello_win.cpp
    }

    x11 {
SOURCES += hello_x11.cpp
    }
像前面一样使用qmake来生成Makefile。


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


    !exists( main.cpp ) {
error( "No main.cpp file found" )
    }
“!”用来否定这个测试,比如,如果文件存在,exists( main.cpp )是真,如果文件不存在,!exists( main.cpp )是真。
CONFIG += qt debug

    SOURECS  += hello.cpp \
UI/testdialog.cpp \
main.cpp

HEADERS  += hello.h \
UI/testdialog.cpp

FORMS   += widget.ui

    win32 {
SOURCES += hello_win.cpp
    }

    x11 {
SOURCES += hello_x11.cpp
    }

!exists( main.cpp ) {
error( "No main.cpp file found" )
    }
像前面一样使用qmake来生成Makefile。如果你临时改变main.cpp的名称,你会看到信息,并且qmake会停止处理。


8. 检查多于一个的条件


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


    win32 {
debug {
   CONFIG += console
}
    }
嵌套的作用域可以使用冒号连接起来,所以最终的项目文件看起来像这样:


    CONFIG += qt debug

    SOURECS  += hello.cpp \
UI/testdialog.cpp \
main.cpp

HEADERS  += hello.h \
UI/testdialog.cpp

FORMS   += widget.ui

    win32 {
SOURCES += hello_win.cpp
    }

    x11 {
SOURCES += hello_x11.cpp
    }

!exists( main.cpp ) {
error( "No main.cpp file found" )
    }
    win32:debug {
CONFIG += console
    }

二、 常用设置


1 CONFIG变量定义了编译器使用的选项、特性以及将要被链接的库。CONFIG内可以添加任何东西,但qmake只内在地提供对下列选项的辨识能力。
下面的选项控制建立工程的编译参数
选项 | 描述
release |在发行模式下建立工程。如果debug同时被定义,release被忽略。
debug |在调试模式下建立工程。
warn_on |编译器应该输出尽可能多的警告。如果warn_off同时被定义,warn_on被忽略
warn_off |编译器输出尽可能少的警告。
应该注意的是,在CONFIG变量里定义的任何选项也都可以用为scope的条件。这使得在发行模式和调试模式下,可以定义不同的设置。在"qmake使用进阶"的Scopes节有对此更详细的介绍。
下面的选项定义了工程建立的类型。注意,有些选项有的只能在相关的平台上使用才有效,在其他平台上,他们没有效果。


选项 | 描述
qt |工程是一个qt程序,应该链接qt库。你可以用QT变量来设定你的程序所需要的任何其 |他Qt模块
thread |工程是一个多线程程序
x11 |工程是一个X11程序或者库。
使用app或者lib模板时,可以有更多的详细设置选项来调整建立过程。这些在"Common Projects"里有详细的解释。
比如,如果你的程序使用Qt库,你像在调试模式下,建立一个多线程程序,你的工程文件应该有下面的句子:
CONFIG += qt thread debug
注意,你必须使用"+=",而不是"="。否则qmake不能使用Qt的设置来判断你的工程所需要的设置。


------------------------------------------------------------------------------------------
声明Qt库
------------------------------------------------------------------------------------------
如果你通过CONFIG变量使qmake支持Qt,则可以进一步确认你的程序需要链接到Qt库中的哪一个。这通过QT变量实现,它被用来声明所需要的扩展库。比如,我们可以用下面的方法,获得XML和网络模块的支持:
CONFIG += qt
QT += network xml
注意,QT默认包含核心模块和GUI模块,所以上面的声明是将network和XML模块增加到默认的列表。下面的赋值取出了默认的模块,在源代码被编译的时候,将会得到错误:
QT = network xml #这会去除核心模块和GUI模块
如果你想建立一个不包含GUI模块的工程,你需要用"-="操作符来去除它。默认情况下,QT包含核心和gui,所以下面的语句得到一个最小的Qt工程:
QT -= gui #只使用核心库
下面列举可以用在QT变量的选项,以及与他们相应的特性:
选项 | 特性
core(默认包含) |QtCore模块
gui(默认包含) |QtGui模块
network |QtNetwork模块
opengl |QtOpenGL模块
sql |QtSql模块
xml |QtXml模块
qt3support |Qt3Support模块
------------------------------------------------------------------------------------------
配置特性
------------------------------------------------------------------------------------------
在特性文件(.prf)里,可以为qmake做其它的特性设置。这些其他的特性通常提供了对在建立工程过程中使用的其他工具的支持。为建立过程增加一个特性,需要把特性的名字(特性文件名的词干)加入到CONFIG变量中。
举个例子,为了使用由pkg-config支持的外部库,比如D-BUS库和ogg库,qmake可以做如下相应的设置:
CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1


三、 qmake对于工程的一些属性


1 构建一个应用程序(app)
应用程序(app)模板告诉qmake创建一个用于构建一个应用程序的makefile文件。使用这个模板,应用程序的种类可以通过CONFIG变量指定。
windows指定这应用程序是一个windows界面程序,consol指定这个应用程序是一个控制台应用程序,这个值仅仅能够在应用程序(app)模板中使用。
TEMPLATE= app


qmake生成的pro文件中常用变量
SUBDIRS 指定子目录
TARGET 指定生成的应用程序名(默认为项目名)
DEPENDPATH 指定程序编译时依赖的相关路径
INCLUDEPATH 指定头文件包含路径
DESTDIR 指定应用程序放置的目录
UI_DIR 指定ui界面文件生成的头文件存放目录(ui文件会由uic命令处理并生成ui_*.h头文件)
RCC_DIR 指定qrc资源文件生成的头文件存放目录(rcc命令会将.qrc文件转换成qrc_*.h文件)
MOC_DIR 指定moc生成的头文件存放目录(moc命令将含Q_OBJECT的头文件转换成标准.h文件)
OBJECTS_DIR 指定目标文件存放的目录
CONFIG 指定编译配置信息,如qt表示用QT库来编译,warn_on把编译器设为输出警告信息,release编译为发布程序,还有debug、debug_and_release等
HEADERS 指定头文件
SOURCES 指定源文件
FORMS 指定.ui界面设计文件
RESOURCES 指定.qrc资源文件
LIBS -- 依赖库文件

例子:
TEMPLATE = app
DESTDIR  = c:/helloapp
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
DEFINES += QT_DLL
CONFIG  += qt warn_on release
 
2 库(lib)模板告诉qmake创建一个用于构建一个库的makefile文件。使用这个模板的时候,除了应用模板中提到的可以使用的变量外,还可以使用VERSION变量。你可以在工程文件中用这些变量指定关于库的信息。
    使用库模板的时候CONFIG可以使用如下值:dll,指明是一个共享库;staticlib,指明是一个静态库;plugin,这个库是一个插件,同时也是一个共享库。
    VERSION变量用于指定库的版本号。
    库文件的名字是基于平台的。比如,在X11和Mac OS X系统下,库的名字是有前缀lib,但是在windwos下是没有的。

3  在调试模式和发布模式下构建和安装
有些时候,我们必须在两种模式下构建一个工程。虽然CONFIG可以保持debug和release两种选项,但是前者覆盖了后者。
为了在两种模式下构建工程,你必须增加debug_and_release选项到CONFIG变量


CONFIG(debug, debug|release) {
TARGET = debug_binary
} else {
TARGET = release_binary
}
然后执行make all可以生成两个文件,当配置CONFIG += build_all选项后直接输make则可以构建两种模式下的文件,否则的话只执行make 默认只构建debug模式下的文件
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值