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 *** 还是先说 ...
随机推荐
- 删除数据恢复数据语句 Oracle
SELECT * FROM TBL_DZYJ_GEORELICSINFO AS OF TIMESTAMP TO_TIMESTAMP('2017-5-8 9:00:00','YYYY-MM-DD HH: ...
- numpy linspace arange函数
linspace(start, end, num_of_points), 区间 [start, end],产生一个等差数列,差为:(end-start)/(num_of_point-1). arang ...
- Haskell语言学习笔记(27)Endo, Dual, Foldable
Endo Monoid newtype Endo a = Endo { appEndo :: a -> a } instance Monoid (Endo a) where mempty = E ...
- python-条件和循环
条件 Demo1: if i < 10: print('i<10') elif i == 0: print('i=0 ') else: print('...') Demo1说明了以下几点: ...
- Numpy统计
Numpy统计 axis=None 是统计函数的标配参数,默认不输入此参数则为对数组每一个元素进行计算,设定轴则对此轴上元素进行计算 1:常用统计函数 .sum(a,axis=None):数组a求和运 ...
- Subquery typo with using in(转)
Subquery typo with using in Do you use the following syntax? SELECT * FROM TABLE WHERE COLUMN IN ( ...
- 消息 14607,级别 16,状态 1,过程 sp_send_dbmail,第 141 行 profile 名称无效
错误:消息 14607,级别 16,状态 1,过程 sp_send_dbmail,第 141 行profile 名称无效 原因: 用SA帐户是可以发送邮件的,但换了另外一个帐户后却提示以上错误. 解决 ...
- PAT L3-004 肿瘤诊断(三维广搜)
在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积. 输入格式: 输入第一行给出4个正整数:M.N.L.T,其中M和N是每张切片的尺寸(即每张切片 ...
- 8-组成n的1的个数
/* ones时间限制:1000 ms | 内存限制:65535 KB难度:3 描述 Given a ...
- URL去重
import socket dictlist ={}; def ReadHost(): hosts = []; obn = open('d:/sss.txt', 'rb'); for line in ...