
Qt4.7.0文档翻译:qmake常规项目,qmake Common Projects
这一章讲述如何为三种基于Qt 的常规项目来设置qmake项目文件。虽然所有类型的项目都会很多变量,但是它们中的每一种都有自己独特的变量,以实现自定义的输出文件。
在这里不讲述与具体项目相关的变量;我们建议读者阅读部署Qt程序文档中的内容以了解特定信息,例如为Mac OS X构建通用二进制文件以及处理 Visual Studio列表文件。
app模板告诉qmake要生成一个最终能构建一个可执行程序的Makefile。在使用这个模板时,还可以通过将以下选项之一添加到CONFIG变量的定义中来指定生成的程序的类型:
选项 | 描述 |
windows | 这个程序是一个Windows 的图形界面程序。 |
console | 仅适合app模板:这个程序是一个Windows 终端程序。 |
当使用这个模板时,会识别以下qmake系统变量。你应当在你的.pro文件中使用这些东西来指定你的程序的一些信息。
•.HEADERS - 这个程序的全部头文件的列表。
•.SOURCES - 这个程序的全部源代码文件的列表。
•.FORMS - 这个程序的全部界面文件(使用Qt Designer创建)的列表。
•.LEXSOURCES - 这个程序的全部lex 源代码文件的列表。
•.YACCSOURCES - 这个程序的全部yacc源代码文件的列表。
•.TARGET - 这个程序的可执行文件的名字。默认情况下是项目文件的名字。(如果需要扩展名,将自动添加)。
•.DESTDIR - 放置目标可执行文件的目录。
•.DEFINES - 这个程序需要的附加的预处理宏定义的列表。
•.INCLUDEPATH - 这个程序需要的附加的包含路径的列表。
•.DEPENDPATH - 这个程序的依赖搜索路径。
•.VPATH - 用来搜索依赖项的搜索路径。
•.DEF_FILE - 仅支持Windows:要与程序链接在一起的.def文件。
•.RC_FILE - 仅支持Windows:供程序使用的资源文件。
•.RES_FILE - 仅支持Windows:要与程序链接在一起的资源文件。
你只需要使用那些你用得上的系统变量,比如,如果你没有任何附加的INCLUDEPATH,那么你不需要指定一个,qmake会将需要的默认值加上。下面是一个示例的项目文件:
TEMPLATE = app
DESTDIR = c:/helloapp
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
DEFINES += QT_DLL
CONFIG += qt warn_on release
对于那些只有一个值的条目,例如模板或者目标目录变量,我们使用"=";但是对于多值的条目,我们使用"+="来将新的值追加到已有的值上。使用"="会将那个条目的值替换掉,例如,如果我们写上DEFINES=QT_DLL,那么其它的全部定义都会被删除。
lib模板告诉qmake要生成一个能够最终构建一个库的Makefile。当使用这个模板时,除了上面在app模板中讲到的系统变量之外,还支持VERSION变量。你应当在你的.pro文件中使用这些东西来指定与这个库相关的信息。
当使用lib模板时,可将以下选项添加到CONFIG变量中,以决定要构建的库的类型:
选项 | 描述 |
dll | 这个库是一个共享库(dll/so)。 |
staticlib | 这个库是一个静态库。 |
plugin | 这个库是一个插件;这也启用了dll 选项。 |
还可以使用以下选项来为库提供附加信息。
•.VERSION - 目标库的版本号,例如,2.3.1。
目标文件名字依赖于具体的平台。例如,在X11和Mac OS X上,库名字前面会加上lib;在Windows上,不会加上前缀名字。
插件是使用lib模板构建的,这在前一节已经说过了。这将告诉qmake为项目生成一个能为每个平台生成适宜的形式的插件的Makefile,这些插件通常是一个库。像普通的库一样,使用VERSION变量来指定与插件相关的信息。
•.VERSION - 目标库的版本号,例如,2.3.1。
Qt Designer插件是使用一组特殊的配置来构建的,这些配置依赖于Qt 在你的系统上的配置方式。为了方便,可以通过在项目的CONFIG变量中加上designer来启用这些配置。例如:
CONFIG += designer plugin
看Qt Designer示例,就能看到更多基于插件的项目的例子。
有些时候,有必要同时以debug 和release 模式构建一个项目。尽管CONFIG变量可以同时储存debug和release选项,但是debug选项会覆盖掉release选项。
要想同时以两种模式构建项目,你必须在你的项目的CONFIG定义中添加上debug_and_release选项:
CONFIG += debug_and_release
CONFIG(debug, debug|release) {
TARGET = debug_binary
} else {
TARGET = release_binary
}
上面的代码片断中的代码块修改了在各个模式下的构建目标,以确保最终目标有不同的名字。提供不同的目标名字,能够确保它们不会互相覆盖。
当qmake处理项目文件时,它将生成一个允许项目同时在两个模式下构建的Makefile规则。用下面的方式调用这个规则:
make all
可以将build_all选项添加到项目文件中的CONFIG变量中,以确保项目在默认情况下是同时在两种模式下构建的:
CONFIG += build_all
这样就可以使用默认规则来处理Makefile 了:
make
build_all选项还确保了当安装规则被执行时,两个版本的目标都会被安装:
make install
可以根据目标平台来自定义构建目标的名字。例如,一个库在Windows 平台和在Unix 平台上可能会使用不同的习惯来命名:
CONFIG(debug, debug|release) {
mac: TARGET = $$join(TARGET,,,_debug)
win32: TARGET = $$join(TARGET,,d)
}
上面的代码片段的默认行为就是在以debug 模式构建时修改构建的目标的名字。可以在代码块后面加上一个else语句,它将对release 模式做同样的事;如果保持不变,那么目标名字也保持不变。
HxLauncher: Launch Android applications by voice commands