在Qt项目中添加全局宏变量来达到按方案编译的目的
遇到一个需求,需要根据不同需要编译所需程序,本人采用了在QtCreator中建立不同的构建设置,配合宏的方式来实现:
1、在项目-构建设置中,添加构建配置
2、在构建步骤里的qmake中的额外参数一栏填入:"DEFINES += XXXX",也就是对应的宏变量
3、按照上述方法再次添加别的构建配置与宏变量。
4、之后便可以在项目使用
#ifdef XXXX
#endif
的方式来判断。
下面是从一些别的blog中的资料:
变量用法:
1、自定义变量:
MY_VARIABLE = value
定义了一个变量MY_VARIABLE,并将值设置为value。
2、变量值的传递:
可以通过在其它任何一个变量的变量名前加$$来把这个变量的值分配给当前的变量。例如:
MY_DEFINES = $$DEFINES
现在MY_DEFINES变量包含了项目文件在这点时DEFINES变量的值。这也和下面的语句一样:
MY_DEFINES = $${DEFINES}
原文地址:
http://blog.csdn.net/u013639526/article/details/43983755
变量赋值:
DEFINES += HELLO=\\\"$$PWD/\\\"
DEFINES += SUCCESS=\\\"string\\\"
在.cpp中测试代码如下:
#ifdef HELLO
qDebug()<<"HELLO="<<HELLO;
#else
qDebug()<<"bye";
#endif
#ifdef HELLO
qDebug()<<"SUCCESS="<<SUCCESS;
#else
qDebug()<<"bye";
#endif
条件编译:
debug{
TARGET = XXd
}
release{
TARGET = XX
}
上面代码的意思是:如果是debug版本,可执行程序的名字是xxd,否则就是xx。可以这样写:
debug:TARGET = xxd
release:TARGET = XX
作用域也可以嵌套使用,例如:
win32{
debug{
TARGET = xxwd
}
}
判断是否存在定义的宏:
DEFINES += CLIENT
contains( DEFINES, CLIENT ) {
# VERSION contains 'CLIENT'
message( "Configuring for CLIENT build..." )
#must be last
ICON = $${TARGET}.png
DESKTOP_FILE = $${TARGET}.desktop
include(../install.pri)
}
Qt项目管理(33个规则)
https://www.cnblogs.com/findumars/p/5602073.html
QMake常用语法
http://www.cnblogs.com/yuohoo/archive/2013/03/11/2954556.html
http://www.cnblogs.com/yuohoo/archive/2013/03/11/2954594.html
https://www.cnblogs.com/yuohoo/archive/2013/03/11/2954631.html
http://www.cnblogs.com/yuohoo/archive/2013/03/12/2956533.html
更多详细信息可以参考文档
qmake Function Reference
在Qt项目中添加全局宏变量来达到按方案编译的目的的更多相关文章
- Vue 项目中添加全局过滤器以及全局混合mixin
可以在.vue文件中定义局部使用的过滤器 export default{ data(){ return [] }, filters:{ toUpperCase:function(value){ ret ...
- 在vue项目中添加全局提示框
1.写一个提示框组件:msg.vue (注明:这里用两个div的原因是成功和失败的提示不能用同一个div,因为他们可能紧接着出现,所以不能从始至终只有一个提示框在工作) 2.写一个调用此组建的js : ...
- 在项目中添加全局的 pch 文件
说明,本片博文仅仅是方便自己以后在添加 pch 文件的配置时候参照使用,担心一些配置的路径由于时间而遗忘. (1)建一个 pch 文件 注意下面要 在 Targets 后打上 对号 (2)对该文件进行 ...
- 在已有QT项目中添加多个UI布局界面
1.在工程中右键->添加新文件,按图选择 2.选择窗口部件 3.创建UI控制类 注意上图红框中命名按实际需要定义,否则后期改动要修改UI文件参数 4.修改UI文件,框1是窗口部件父类,框2是UI ...
- QT全局宏变量的实现
qt中如何实现定义一个宏,在整个工程中都可以实现呢?下面我来写一个亲测的例子: pro中添加如下宏定义代码: DEFINES += HELLO=\"$$PWD/\" DEFINES ...
- [ionic开源项目教程] - 第5讲 如何在项目中使用全局配置
第5讲 如何在项目中使用全局配置? Q:ionic开发,说纯粹一点,用的就是html+css+js,那么无疑跟web开发的方式是类似的.在这里给大家分享一个小技巧,如何在项目中使用全局配置? A:我的 ...
- 如何在VUE项目中添加ESLint
如何在VUE项目中添加ESLint 1. 首先在项目的根目录下 新建 .eslintrc.js文件,其配置规则可以如下:(自己小整理了一份),所有的代码如下: // https://eslint.or ...
- VS中添加预处理宏的方法
VS中添加预处理宏的方法 除了在.c及.h中添加宏定义之外,还可以采用如下方法添加宏定义: 1.若只需要定义一个宏(如#define DEBUG),可以右键点击工程-->属性-->c/c+ ...
- Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作
Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序2>. 添加一个 ADO.NET实体数据模型,选择对应的数据库与表(Studen ...
随机推荐
- C# Parallel并发执行相关问题
1.Parallel并发执行 using System;using System.Collections.Generic;using System.Linq;using System.Text;usi ...
- CF1121C 模拟
恶心场恶心题,,round千万不能用库函数的.. /*枚举时间轴t,r是当前完成比例, 记录每个测试的开始时间si,如果有t-si等于r,那么这个测试就标记一下 优先队列存储每个测试,按照si+ai的 ...
- Nginx详解六:Nginx基础篇之Nginx日志
1.Nginx日志类型 error.log:记录Nginx处理http请求的错误的状态,以及Nginx服务本身服务运行的错误的状态 access_log:记录通过Nginx的http请求的访问状态,用 ...
- python 垃圾回收
# 垃圾回收 # 小整数对象池 # a = 100# python对小整数的定义是[-5,257],这些证书对象是提前创建好的,不会被垃圾回收,再一个python的程序中,所有位于这个范围内的正式使用 ...
- (Access denied for user 'root'@'slaver1' (using password: YES))
1.问题描述,启动azkaban的时候报如下所示的错误.之前使用azkaban是root用户,今天使用hadoop用户进行配置和使用,报这个错,说是root连接mysql拒绝了. [hadoop@sl ...
- C# 5.0 CallerMemberName CallerFilePath CallerLineNumber获取调用方法名称,路径,行号
class Program { static void Main(string[] args) { Log("测试"); Console.Read(); } public stat ...
- [转] js中的钩子机制(hook)
什么是钩子机制?使用钩子机制有什么好处? 钩子机制也叫hook机制,或者你可以把它理解成一种匹配机制,就是我们在代码中设置一些钩子,然后程序执行时自动去匹配这些钩子:这样做的好处就是提高了程序的执行效 ...
- 如何自动设置网页中meta节点keywords属性-【SEO】
在处理网页的SEO时,经常需要设置meta节点中keywords的属性. 如果是UGC产生内容的话,对于这个字段可以由用户或编辑手工设置相关的标签或关键词来进行. 但对于MGC(机器产生内容)的内容的 ...
- MySQL InnoDB中的事务隔离级别和锁的关系
前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力. ...
- device not found解决方案
今天在使用cordova tools进行真机调试的,报了一个错:device not found; 字面意思就是没有发现设备,这时候可以首先尝试重启adb服务 C:\Users\username\Ap ...