qmake-how to
简单例子
假设已经实现如下程序:
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的更多相关文章
- 【xcode】qt程序不通过qmake,运行找不到动态库的坑
现象:试图在一个已有项目里增加qt的代码,因此手动加入相关framework(未通过qmake生成工程),编译连接都通过,但是运行时崩溃,提示错误: dyld: Library not loaded ...
- Qt qmake 使用(含遗留问题)
网上在介绍编译Qt的教程中,大多数都是这样提到编译的: 1, 运行 VS2012 x86 Native Tools Command Prompt 批处理 2, cd <install qt5.0 ...
- 使用qmake构建程序(有关.pro和.vcproj编译选项对应关系)
houjinxin 为了方便统一构建,准备使用qmake构建所有的vc工程,无论是否使用了Qt库,可是在网上找了几天,有几个选项根本就不知道怎么在pro里面配置,才能生成预期的vcproj文件... ...
- 利用qmake生成Makefile文件
在linux下写程序,免不了要写Makefile文件,用automake,总感觉比较麻烦,linux人喜欢做麻烦的事,以显得风格迥异. 其实用qmake生成Makefile文件相当简单. 1 装好qm ...
- 翻译qmake文档 目录
利用空闲时间把qmke的文档翻译出来,翻译水平有限,有些地方翻译的不好,请谅解, 如果您能指出来,我会很感激并在第一时候做出修改. 翻译qmake文档(一) qmake指南和概述 翻译qmake文档( ...
- 翻译qmake文档(四) Building Common Project Types
翻译qmake文档 目录 本章原英文文档:http://qt-project.org/doc/qt-5/qmake-common-projects.html 构建常见的项目类型 本章描述 ...
- 翻译qmake文档(三) Creating Project Files
翻译qmake文档 目录 原英文文档:http://qt-project.org/doc/qt-5/qmake-project-files.html 创建项目文件 项目文件包含qmake构建你 ...
- 翻译qmake文档(二) Getting Started
翻译qmake文档 目录 原英文文档: http://qt-project.org/doc/qt-5/qmake-tutorial.html 本教程教讲授qmake基础知识.这个手册里 ...
- 翻译qmake文档(一) qmake指南和概述
翻译qmake文档 目录 英文文档连接: http://qt-project.org/doc/qt-5/qmake-manual.html http://qt-project.org/doc/qt-5 ...
- qmake的使用
[TOC] 本文由乌合之众 lym瞎编,欢迎转载 blog.cnblogs.net/oloroso 本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso *** 还是先说 ...
随机推荐
- IExpress 制作安装包 注意事项
被打包的文件名不能超过8个字符,否则iexpress会取前6个字符 + "~1".
- github上关于iOS的各种开源项目集合(转)
UI 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITable ...
- springMVC学习记录1-使用XML进行配置
SpringMVC是整个spring中的一个很小的组成,准确的说他是spring WEB这个模块的下一个子模块,Spring WEB中除了有springMVC还有struts2,webWork等MVC ...
- UNION会自动删除重复项,union与union all的差异
UNION会自动删除重复项,刷选出部分字段的时候要注意了,如果刷选出来的两个字段的值完全相同就会剩下一个. UNION ALL 和 UNION 不同之处在于 UNION ALL 会将左右两个查询的结果 ...
- KNN识别手写数字
一.问题描述 手写数字被存储在EXCEL表格中,行表示一个数字的标签和该数字的像素值,有多少行就有多少个样本. 一共42000个样本 二.KNN KNN最邻近规则,主要应用领域是对未知事物的识别,即判 ...
- Jmeter分布式
Jmeter运行时十分耗CPU和内存,在实际应用中有时一台机器不能满足测试要求,这时就需要利用多台机器来进行分布式. Jmeter分布式的测试框架:框架中所有的测试脚本都要从测试主机传送到测试从机 ...
- nyoj743-复杂度 【排列组合】
http://acm.nyist.net/JudgeOnline/problem.php?pid=743 复杂度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 fo ...
- Spring配置连接池
---------------------siwuxie095 Spring 配置连接池 1.Spring 配置内置连接 ...
- Dom对象总结介绍&事件介绍&增删查找标签
1.dom有5个属性,属性内容如下 下面开始介绍Dom属性,一共有5个属性 1.document object:文档对象 2.element object:标签对象 3.test object:文本对 ...
- jquery 动态添加的代码不能触发绑定事件
今天发现jQuery对动态添加的元素不触发事件,比如blur.click事件等 参考文章证明了我的结论,并给出了原因及解决方案 原因:程序找不到动态添加的节点. 解决方案:在绑定父元素后的子元素 $( ...