简单例子

假设已经实现如下程序:

hello.cpp
hello.h
main.cpp

首先,使用编辑器,在上述文件目录下创建文件hello.pro.然后加入几行语句告诉qmake项目中的源文件和头文件。

使用 SOURCES 变量 加入源文件,例如:

SOURCES +=hello.cpp

加入所有源文件

SOURCES += hello.cpp
SOURCES += main.cpp

也可以使用Make-like语法形式。如下:

SOURCES = hello.cpp\
main.cpp

加入头文件

HEADERS += hello.h
SOURCES +=hello.cpp
SOURCES += main.cpp

target 是自动设定的;就像project file 一样。但是不同的平台有不同的后缀。比如,如果project file 是 hello.pro,那么在Windows上target就是 hello.exe,而linux上则是 hello.如果使用不同的名称的话,可以这样设置project file:

TARGET = helloworld

设置 CONFIG变量的最后一步。由于是QT应用程序,必须把qt放入CONFIG中,这样qmake就会生成相应的链接库,并确保建立的moc和uic包含在生成的Makefile中。

最终的project file应该像这样:

CONFIG +=qt
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

现在就可以使用qmake来为应用程序生成Makefile。在项目目录下,输入命令行,如下:

qmake -o Makefile hello.pro

然后根据使用的编译器输入make和nmake

对于Visual Studio用户来说,qmake也会生成.dsp和.vcproj文件,比如:

qmake -tp vc hello.pro

使应用程序可调试

release版本的应用程序不包含任何调试符号或者其他的调试信息。在开发过程中往往需要调试版本提供相关的信息。这个很容易实现,只要在CONFIG变量中加入debug

例如:

CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

像之前一样使用qmake产生Makefile,可以在debugging环境下,运行程序,得到有用的信息。

加入特定平台的源文件

在通过几个小时的编程后,有可能开始写特定平台部分,而且需要与其他代码独立分开。有两个新文件:hellowin.cpp和hellolinux.cpp.不能把它们都加入SOURCES变量中,这样两个文件都会在Makefile中。所以在运行qmake时,需要使用一个范围根据独立平台来处理。

一个适用于windows的简单范围,如下:

win32{
SOURCES += hellowin.cpp
}

如果qmake运行在Windows上,将hellowin.cpp加入到源文件列表中。如果qmake运行在其他平台上,就会被忽略。

现在剩下的就是为Unix-specific 文件创建一个范围,如下:

CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}

像之前一样使用qmake生成Makefile

如果文件不存在停止qmake

如果某些文件不存在,可能就不想创建Makefile.可以使用exists()函数来检查文件是否存在。使用error()函数来停止qmake.这和scopes的效果是一样的。简单的使用函数来代替scope 条件

检查main.cpp是否存在,如下:

!exists(main.cpp) {
errror("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")
}

像之前一样生成makefile,如果重命名main.cpp,将会看到一些信息并且qmake会停止。

多条件检查

假设使用Windows ,在命令行运行应用程序时,希望能看到qDebug()的声明输出。如果构建的应用程序没有合适的控制设置,就不能看到输出。只要在CONFIG中加入console,makefile中就会有设置。然而,如果debug已经加入了CONFIG中,想在运行时,加入console。需要使用嵌套范围,例如:

win32 {
debug {
CONFIG +=console
}
}

嵌套范围使用冒号连在一起,最终的项目如下:

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-how to的更多相关文章

  1. 【xcode】qt程序不通过qmake,运行找不到动态库的坑

    现象:试图在一个已有项目里增加qt的代码,因此手动加入相关framework(未通过qmake生成工程),编译连接都通过,但是运行时崩溃,提示错误: dyld: Library not loaded ...

  2. Qt qmake 使用(含遗留问题)

    网上在介绍编译Qt的教程中,大多数都是这样提到编译的: 1, 运行 VS2012 x86 Native Tools Command Prompt 批处理 2, cd <install qt5.0 ...

  3. 使用qmake构建程序(有关.pro和.vcproj编译选项对应关系)

    houjinxin 为了方便统一构建,准备使用qmake构建所有的vc工程,无论是否使用了Qt库,可是在网上找了几天,有几个选项根本就不知道怎么在pro里面配置,才能生成预期的vcproj文件... ...

  4. 利用qmake生成Makefile文件

    在linux下写程序,免不了要写Makefile文件,用automake,总感觉比较麻烦,linux人喜欢做麻烦的事,以显得风格迥异. 其实用qmake生成Makefile文件相当简单. 1 装好qm ...

  5. 翻译qmake文档 目录

    利用空闲时间把qmke的文档翻译出来,翻译水平有限,有些地方翻译的不好,请谅解, 如果您能指出来,我会很感激并在第一时候做出修改. 翻译qmake文档(一) qmake指南和概述 翻译qmake文档( ...

  6. 翻译qmake文档(四) Building Common Project Types

    翻译qmake文档 目录 本章原英文文档:http://qt-project.org/doc/qt-5/qmake-common-projects.html 构建常见的项目类型        本章描述 ...

  7. 翻译qmake文档(三) Creating Project Files

    翻译qmake文档 目录   原英文文档:http://qt-project.org/doc/qt-5/qmake-project-files.html   创建项目文件 项目文件包含qmake构建你 ...

  8. 翻译qmake文档(二) Getting Started

    翻译qmake文档 目录 原英文文档: http://qt-project.org/doc/qt-5/qmake-tutorial.html         本教程教讲授qmake基础知识.这个手册里 ...

  9. 翻译qmake文档(一) qmake指南和概述

    翻译qmake文档 目录 英文文档连接: http://qt-project.org/doc/qt-5/qmake-manual.html http://qt-project.org/doc/qt-5 ...

  10. qmake的使用

    [TOC] 本文由乌合之众 lym瞎编,欢迎转载 blog.cnblogs.net/oloroso 本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso *** 还是先说 ...

随机推荐

  1. Java 跨域 CrossOrigin注解 Filter拦截 Nginx配置

    说明 资源请求的发起方与请求的资源不在同一个域中的: 一般的,只要网站的[协议名protocol].[主机host].[端口号port]这三个中的任意一个不同,网站间的数据请求与传输便构成了跨域调用: ...

  2. nodejs文件操作笔记

    nodejs添加了流的概念,通过流操作文件如行云流水,比早前便利畅快多了. 先来第一个例子,我们建一个stream.js文件,里面内容如下: var fs = require("fs&quo ...

  3. 好用的模板引擎NVelocity

    CastleNVelocity-1.1.1,使用方法: 把dll放到项目中,添加引用,修改配置的文件夹以及数据模型,最后在逻辑代码中调用即可. 封装到CommonHelper.cs using Sys ...

  4. ie6浏览器的安装

    试过各种方法都不行,最后用ie8卸载工具,不仅卸载了ie8还自动安装了ie6,非常棒!!!我的空间有那款卸载工具.

  5. cf-Round542-Div2-C(暴力+DFS)

    题目链接:http://codeforces.com/contest/1130/problem/C 思路: 利用DFS搜索(r1,c1)和(r2,c2)可到达的点的集合,分别存在a1,a2中,若a1= ...

  6. configparser模块 logging模块

    configparser模块 固定格式的配置文件 有一个对应的模块去帮你做这个文件的字符串处理 config = configparser.Configparser() config.read(“ex ...

  7. 【英宝通Unity4.0公开课学习 】(二)场景创建

    本讲共四节,貌似讲课老师的速度变快了,2倍速听不清了...调成了1.7倍...老师果然越来越熟练了啊! 而且最开始的萌妹纸也不再出现在视频里了,我当时还想着完全可以换成老师自己提问嘛! 不过有妹纸声音 ...

  8. 【Python基础教程第2版】——第一讲:基础知识

    1.长字符串:(用三引号如'''或者"""来引起来) >>> print """This is a very log st ...

  9. python之三级菜单作业

    作业需求如下 1.根据用户的输入打印相应的省.市.县的信息 2.每次只要用户输入b,则返回上一级菜单 3.每次只要用户输入q,则直接退出 4.用户输错需要有提示 homework_dict = {'内 ...

  10. Spring集成Redis使用注解

    转载:http://blog.csdn.net/u013725455/article/details/52129283 使用Maven项目,添加jar文件依赖: <project xmlns=& ...