在Qt项目中添加全局宏变量来达到按方案编译的目的

Posted 湛蓝玫瑰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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项目中添加全局宏变量来达到按方案编译的目的的主要内容,如果未能解决你的问题,请参考以下文章

Qt之Q_PROPERTY宏理解

Qt全局宏和变量

详解 Qt 线程间共享数据(用信号槽方式)

如何为 nvcc 添加预定义宏?

Qt入门教程QObject篇属性系统

Qt入门教程QObject篇属性系统