指南教你如何使用qmake,
假设你已经完成了一个你自己的应用,并且你创建了如下的文件:
hello.cpp
hello.h
main.cpp
你可以在qt发行版中的examples/qmake/tutorial路径下找到。首先应用你的文本编辑工具创建一个hello.pro文件。最起初的一件事就是添加一行以告诉编译器头文件以及源文件的所处位置。
SOURCES += hello.cpp
依照上面的格式将工程中的文件全部添入,最后为:
SOURCES += hello.cpp
SOURCES += main.cpp
你也可以根据语法规则这样写:
SOURCES = hello.cpp \
main.cpp
现在源文件已经列在工程文件中,该添加头文件了,添加方法类似源文件的方法。最终如下:
HEADERS += hello.h
工程的生成文件命名是自动的,与工程名一致,并且添一些与平台有关的后缀名。比如工程名叫hello.pro,目标文件在Windows上为hello.exe,在Unix上
是hello.如果你想拥有一个名字,你可以这样做:
TARGET = helloworld
最后一步就是设置CONFIG变量,由于这是个Qt的应用程序,理所当然我们就需将qt添加到CONFIG这一行,这样qmake就可以链接相应的库。最终这个工程文件将如下:
CONFIG += qt
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
现在你可以为你的应用程序生成一个Makefile了。在命令行下,输入如下命令:
qmake -o Makefile hello.pro
接下来输入make来编译你的程序。对于Visual Studio的用户来说,qmake可以生成.dsp或者.vcproj文件。例如:
qmake -tp vc -o hello.dsp hello.pro
编译一个可以调试的程序发行版的程序并没有包含任何调试信息或者其他调试信息。在开发过程中,生成一个包含相关信息的程序是非常重要的,通过在工程文件中的CONFIG变量中
添加debug就可以轻松达到,例如:
CONFIG += qt debug
在生成Makefile之前先用qmake命令。这样你就可以掌握有用的信息,当你在调试的环境中时。
添加平台细节的源文件
通过一些时间的编程,你的程序很可能涉及到平台相关的东西,并且你决定将平台有关的代码独立开来。这样你就有两个新的文件在你的工程里:hellowin.cpp,hellounix.cpp。我们不能简简单单的将这些文件添加到SOURCE变量中去,这样会导致将两个源文件都添加到Makefile中去了。所以,我们所能做的就是用一个范围,能够根据所选平台进行执行。
如下面一个简单例子:
win32 {
SOURCES += hellowin.cpp
}
这样一来,他将只会将hellowin.cpp添加到源文件列表中去。如果qmake是运行在其他平台上,它将会忽略它。现在剩下的是再创建一个范围给unix相关的文件。完成整个文件后,将会如下:
CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}
如果文件不存在,停止qmake当缺少某个文件时你并不想去创建Makefile。我们可以通过exists()函数来检测文件是否存在。并且我们可以通过调用error()函数来终止qmake。这一点跟
前面那个范围比较类似。只是简单的换成了函数,如下检测main.cpp是否存在。
!exists( main.cpp ) {
error( "No main.cpp file found" )
}
!用来取反这次测试,例如exists(main.cpp)如果文件存在的话,就为true,!exists(main.cpp)如果文件不存在的话,就为true,
CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}
!exists( main.cpp ) {
error( "No main.cpp file found" )
}
检查多个条件假设你用的是Windows,你想通过qDebug()来看状态输出并且你通过命令行来运行程序。除非你通过控制台,否则你看不到输出。我们只需简单将console添加到CONFIG变量中。当我们假设我们只想在运行Windows并且debug已经添加到CONFIG那行中才添加console。这就需要两个scope了。先创建一个scope,然后再在里面创建个scope,将设置放在最近的那个scope里,像这样:
win32 {
debug {
CONFIG += console
}
}
最终pro文件如下:
CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}
!exists( main.cpp ) {
error( "No main.cpp file found" )
}
win32:debug {
CONFIG += console
}
就这样,你已经完成了qmake指南,并且你能够为你的开发写pro文件了。