-- 作者:yarson6
-- 发布时间:2009-3-10 21:31:46
-- qmake教程
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的教程,并且已经准备好为你的开发项目写项目文件了。 <!-- eof -->
|