qmake教程介绍

来源:互联网 发布:在线调色软件 编辑:程序博客网 时间:2024/05/11 05:29

转载地址:http://blog.chinaunix.net/uid-14414741-id-2814024.html


qmake教程介绍
这个教程可以教会你如何使用qmake。我们建议你看完这个教程之后读一下qmake手册。
开始很简单
让我们假设你已经完成了你的应用程序的一个基本实现,并且你已经创建了下述文件:
hello.cpp
hello.h
main.cpp
你可以在qt/qmake/example中发现这些文件。你对这个应用程序的配置仅仅知道的另一件事是它是用Qt写的。首先,使用你所喜欢的纯文本编辑器,在qt/qmake/tutorial中创建一个叫做hello.pro的文件。你所要做的第一件事是添加一些行来告诉qmake关于你所开发的项目中的源文件和头文件这一部分。
我们先把源文件添加到项目文件中。为了做到这点,你需要使用SOURCES变量。只要用SOURCES +=来开始一行,并且把hello.cpp放到它后面。你需要写成这样:
    SOURCES += hello.cpp
我们对项目中的每一个源文件都这样做,直到结束:
    SOURCES += hello.cpp
    SOURCES += main.cpp
如果你喜欢使用像Make一样风格的语法,你也可以写成这样,一行写一个源文件,并用反斜线结尾,然后再起新的一行:
    SOURCES = hello.cpp \
     main.cpp
现在源文件已经被列到项目文件中了,头文件也必须添加。添加的方式和源文件一样,除了变量名是HEADERS。
当你做完这些时,你的项目文件就像现在这样:
    HEADERS += hello.h
    SOURCES += hello.cpp 
    SOURCES += main.cpp 
目标名称是自动设置的,它被设置为和项目文件一样的名称,但是为了适合平台所需要的后缀。举例来说,加入项目文件叫做“hello.pro”,在 Windows上的目标名称应该是“hello.exe”,在Unix上应该是“hello”。如果你想设置一个不同的名字,你可以在项目文件中设置它:
    TARGET = helloworld
最后一步是设置CONFIG变量。因为这是一个Qt应用程序,我们需要把“qt”放到CONFIG这一行中,这样qmake才会在连接的时候添加相关的库,并且保证moc和uic的连编行也被包含到Makefile中。
最终完成的项目文件应该是这样的:
    CONFIG += qt
    HEADERS += hello.h
    SOURCES += hello.cpp
    SOURCES += main.cpp 
你现在可以使用qmake来为你的应用程序生成Makefile。在你的应用程序目录中,在命令行下输入:
    qmake -o Makefile hello.pro
然后根据你所使用的编译器输入make或者nmake。
使应用程序可以调试
应用程序的发布版本不包含任何调试符号或者其它调试信息。在开发过程中,生成一个含有相关信息的应用程序的调试版本是很有用处的。通过在项目文件的CONFIG变量中添加“debug”就可以很简单地实现。
例如:
    CONFIG += qt debug
    HEADERS += hello.h
    SOURCES += hello.cpp
    SOURCES += main.cpp 
像前面一样使用qmake来生成一个Makefile并且你就能够调试你的应用程序了。
添加特定平台的源文件
在编了几个小时的程序之后,你也许开始为你的应用程序编写与平台相关的部分,并且决定根据平台的不同编写不同的代码。所以现在你有两个信文件要包含到你的项目文件中-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
    HEADERS += hello.h
    SOURCES += hello.cpp
    SOURCES += main.cpp 
    win32 {
SOURCES += hello_win.cpp
    }
    x11 {
SOURCES += hello_x11.cpp
    }
像前面一样使用qmake来生成Makefile。
如果一个文件不存在,停止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
    HEADERS += hello.h
    SOURCES += hello.cpp
    SOURCES += main.cpp 
    win32 {
SOURCES += hello_win.cpp
    }
    x11 {
SOURCES += hello_x11.cpp
    }
    !exists( main.cpp ) {
error( "No main.cpp file found" )
    }
像前面一样使用qmake来生成Makefile。如果你临时改变main.cpp的名称,你会看到信息,并且qmake会停止处理。
检查多于一个的条件
假设你使用Windows并且当你在命令行运行你的应用程序的时候你想能够看到qDebug()语句。除非你在连编你的程序的时候使用console设置,你不会看到输出。我们可以很容易地把console添加到CONFIG行中,这样在Windows下,Makefile就会有这个设置。但是如果告诉你我们只是想在当我们的应用程序运行在Windows下并且当debug已经在CONFIG行中的时候,添加console。这需要两个嵌套的作用域;只要生成一个作用域,然后在它里面再生成另一个。把设置放在最里面的作用域里,就像这样:
    win32 {
debug {
   CONFIG += console
}
    }
嵌套的作用域可以使用冒号连接起来,所以最终的项目文件看起来像这样:
    CONFIG += qt debug
    HEADERS += hello.h
    SOURCES += hello.cpp
    SOURCES += main.cpp 
    win32 {
SOURCES += hello_win.cpp
    }
    x11 {
SOURCES += hello_x11.cpp
    }
    !exists( main.cpp ) {
error( "No main.cpp file found" )
    }
    win32:debug {
CONFIG += console
    }

就这些了!你现在已经完成了qmake的教程,并且已经准备好为你的开发项目写项目文件了。


 原文地址 http://www.qtopia.org.cn/doc/qiliang.net/qt/qmake-manual-4.html
10分钟学会使用qmake
创建一个项目文件
qmake使用储存在项目(.pro)文件中的信息来决定Makefile文件中该生成什么。
一个基本的项目文件包含关于应用程序的信息,比如,编译应用程序需要哪些文件,并且使用哪些配置设置。
这里是一个简单的示例项目文件:
    SOURCES = hello.cpp
    HEADERS = hello.h
    CONFIG += qt warn_on release
我们将会提供一行一行的简要解释,具体细节将会在手册的后面的部分解释。
    SOURCES = hello.cpp
这一行指定了实现应用程序的源程序文件。在这个例子中,恰好只有一个文件,hello.cpp。大部分应用程序需要多个文件,这种情况下可以把文件列在一行中,以空格分隔,就像这样:
    SOURCES = hello.cpp main.cpp
另一种方式,每一个文件可以被列在一个分开的行里面,通过反斜线另起一行,就像这样:
    SOURCES = hello.cpp \
main.cpp
一个更冗长的方法是单独地列出每一个文件,就像这样:
    SOURCES += hello.cpp
    SOURCES += main.cpp
这种方法中使用“+=”比“=”更安全,因为它只是向已有的列表中添加新的文件,而不是替换整个列表。
HEADERS这一行中通常用来指定为这个应用程序创建的头文件,举例来说:
    HEADERS += hello.h
列出源文件的任何一个方法对头文件也都适用。
CONFIG这一行是用来告诉qmake关于应用程序的配置信息。
    CONFIG += qt warn_on release
在这里使用“+=”,是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项是更安全的。
CONFIG一行中的qt部分告诉qmake这个应用程序是使用Qt来连编的。这也就是说qmake在连接和为编译添加所需的包含路径的时候会考虑到Qt库的。
CONFIG一行中的warn_on部分告诉qmake要把编译器设置为输出警告信息的。
CONFIG一行中的release部分告诉qmake应用程序必须被连编为一个发布的应用程序。在开发过程中,程序员也可以使用debug来替换release,稍后会讨论这里的。
项目文件就是纯文本(比如,可以使用像记事本、vim和xemacs这些编辑器)并且必须存为“.pro”扩展名。应用程序的执行文件的名称必须和项目文件的名称一样,但是扩展名是跟着平台而改变的。举例来说,一个叫做“hello.pro”的项目文件将会在Windows下生成 “hello.exe”,而在Unix下生成“hello”。
生成Makefile
当你已经创建好你的项目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的项目文件那里然后输入:
Makefile可以像这样由“.pro”文件生成:
    qmake -o Makefile hello.pro 
对于Visual Studio的用户,qmake也可以生成“.dsp”文件,例如:
    qmake -t vcapp -o hello.dsp hello.pro
 
 qmake的使用说明
        1.简介:

  qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。是qt工具包的一部分.在Unix&linux上写程式的人大概都碰过Makefile。用 make 来开发和编译程式的确很方便,可是要写出一个 Makefile就不简单了,手写Makefile是比较困难并且容易出错的,这阻挡了很多一部分的linux爱好者加入linux程序开发的阵营。
  虽然Open Source Software也有GNU Automake和GNU Autoconf两个软件可以生成makefile文件,但是对于一个简单的项目,使用Automake和Autoconf就有点杀鸡也用宰牛刀了.使用qmake完全可以符合你的要求.Trolltech公司使用qmake作为Qt库和Qt所提供的工具的主要连编工具。
  
  2.安装qmake
  在linux平台上,安装完qt以及相关的qt工具包,qmake就已经被安装好了.你唯一要注意的就是QTDIR值的设定,这个必须设置到Qt被安装到的地方。如:/usr/lib/qt3/,以及qmake可执行文件的路径加到PATH路径中. 
  
  3. 一个简单的例子 
  用vi写个hello.c ,
  #include <stdio.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 更多技巧的最佳范例。 
  这篇简介只用到了 qmake 的一些皮毛罢了,希望这篇文件能帮助你对产生 Makefile有个简单的依据。





原创粉丝点击