1. 程式人生 > >在Qt項目中添加全局宏變量來達到按方案編譯的目的

在Qt項目中添加全局宏變量來達到按方案編譯的目的

方案 定義 這也 文件 win 構建 post gpo cti

遇到一個需求,需要根據不同需要編譯所需程序,本人采用了在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項目中添加全局宏變量來達到按方案編譯的目的