遇到一个需求,需要根据不同需要编译所需程序,本人采用了在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项目中添加全局宏变量来达到按方案编译的目的的更多相关文章

  1. Vue 项目中添加全局过滤器以及全局混合mixin

    可以在.vue文件中定义局部使用的过滤器 export default{ data(){ return [] }, filters:{ toUpperCase:function(value){ ret ...

  2. 在vue项目中添加全局提示框

    1.写一个提示框组件:msg.vue (注明:这里用两个div的原因是成功和失败的提示不能用同一个div,因为他们可能紧接着出现,所以不能从始至终只有一个提示框在工作) 2.写一个调用此组建的js : ...

  3. 在项目中添加全局的 pch 文件

    说明,本片博文仅仅是方便自己以后在添加 pch 文件的配置时候参照使用,担心一些配置的路径由于时间而遗忘. (1)建一个 pch 文件 注意下面要 在 Targets 后打上 对号 (2)对该文件进行 ...

  4. 在已有QT项目中添加多个UI布局界面

    1.在工程中右键->添加新文件,按图选择 2.选择窗口部件 3.创建UI控制类 注意上图红框中命名按实际需要定义,否则后期改动要修改UI文件参数 4.修改UI文件,框1是窗口部件父类,框2是UI ...

  5. QT全局宏变量的实现

    qt中如何实现定义一个宏,在整个工程中都可以实现呢?下面我来写一个亲测的例子: pro中添加如下宏定义代码: DEFINES += HELLO=\"$$PWD/\" DEFINES ...

  6. [ionic开源项目教程] - 第5讲 如何在项目中使用全局配置

    第5讲 如何在项目中使用全局配置? Q:ionic开发,说纯粹一点,用的就是html+css+js,那么无疑跟web开发的方式是类似的.在这里给大家分享一个小技巧,如何在项目中使用全局配置? A:我的 ...

  7. 如何在VUE项目中添加ESLint

    如何在VUE项目中添加ESLint 1. 首先在项目的根目录下 新建 .eslintrc.js文件,其配置规则可以如下:(自己小整理了一份),所有的代码如下: // https://eslint.or ...

  8. VS中添加预处理宏的方法

    VS中添加预处理宏的方法 除了在.c及.h中添加宏定义之外,还可以采用如下方法添加宏定义: 1.若只需要定义一个宏(如#define DEBUG),可以右键点击工程-->属性-->c/c+ ...

  9. Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作

    Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序2>. 添加一个 ADO.NET实体数据模型,选择对应的数据库与表(Studen ...

随机推荐

  1. Practical Web Penettation Testing (the first one Mutillidae 大黄蜂)

    1.now we looke at this book . I decide  to make a brief review the book covers as follows (I straigh ...

  2. 目标检测算法之YOLOv1与v2

    YOLO:You Only Look Once(只需看一眼) 基于深度学习方法的一个特点就是实现端到端的检测,相对于其他目标检测与识别方法(如Fast R-CNN)将目标识别任务分成目标区域预测和类别 ...

  3. Ueditor设置默认字体、字号、行间距,添加字体种类(转)

    Ueditor默认字体.字号.行间距的修改: ueditor默认字号是16号,默认字体为sans-serif,默认行间距为5px,如下图所示: 首先,修改ueditor.all.js文件中如上图红框中 ...

  4. 新版的K8S中的flannel.yaml文件中要注意的细节

    部署flannel作为k8s中的网络插件,yaml文件都大小同异. 但在要注意以下细节. 以前,只需要前面master判断. 现在也需要有not-ready状态了. tolerations: - ke ...

  5. Java集合源码学习(四)HashMap

    一.数组.链表和哈希表结构 数据结构中有数组和链表来实现对数据的存储,这两者有不同的应用场景,数组的特点是:寻址容易,插入和删除困难:链表的特点是:寻址困难,插入和删除容易:哈希表的实现结合了这两点, ...

  6. [转]Howto: 使用ImageBrush替换PictureMarkerSymbol以加强graphic显示性能

    原文地址:http://support.esrichina-bj.cn/2009/0728/1007.html 文章编号 : 37033 软件: ArcGIS API for Microsoft Si ...

  7. Centos6.5安装Apache ab性能测试工具

    ab简洁: ab是apache自带的压力测试工具,ab是apachebench命令的缩写. ab不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试. ab是一个h ...

  8. 关闭PHP的opcache缓存

    1.使用phpinfo();查看配置信息 2.搜索Additional .ini files parsed 3.查看opcache安装目录 4.打开文件将   opcache.enable=1 改成  ...

  9. 关闭selinux服务

    vim /etc/selinux/config 将SELINUX=disabled 执行setenforce 0

  10. JAVA首次课堂测试总结

    暑期生活已经结束,新的学期也已经开始,而暑期放假之前约定的JAVA首次课堂测试也如期的到来,本次测试真的可以学到和多东西,也有很多感想. 首先体会最深的就是系主任所说的软件工程不是那么好学的,真的需要 ...