閱讀QtCreator-須要知道的qmake

qmake文檔真的不是很全,好多變量都不知道到哪裏去找他們的用法,只能暫時copy源碼中的部分來用,以後再慢慢學習。這裏總結一下查找到資料的qmake知識。php

  • _DATE_  當前日期和時間
  • _FILE_    當前qmake正在解析的文件(pri、pro文件等)
  • QMAKE_HOST   OS相關信息,
    • QMAKE_HOST.arch    系統格式(x86或64)
    • QMAKE_HOST.name  計算機在網絡中的名稱
    • QMAKE_HOST.os       操做系統(Windows or linux)
    • QMAKE_HOST.version     系統版本(Win95,WinXP…Win7得到的信息爲144.

更多請參考:http://www.qtcentre.org/wiki/index.php?title=Undocumented_qmakelinux

比較有用的幾個函數:

將路徑中反斜槓( \ )轉換成斜槓(/ ),

defineReplace(cleanPath) {
    win32:1 ~= s|\\\\|/|g    #用/替換掉\,正則表達式當中用四個反斜槓匹配反斜槓, 這裏是Perl的正則表達式的用法,|g表示替換所有符合的模式
    contains(1, ^/.*):pfx = / #前綴是/的,在最後要加上/
    else:pfx =
    segs = $$split(1, /)#根據/分開參數1
    out =
	#去除segs中..和.
    for(seg, segs) {
        equals(seg, ..):out = $$member(out, 0, -2) #文檔中member函數是隻有兩個參數的,因此這個-2不清楚是作什麼的
        else:!equals(seg, .):out += $$seg
    }
    return($$join(out, /, $$pfx)) ##用/將列表連接起來,並用pfx做爲結果的前綴
}

Debug與Release生成不一樣名字的文件

不少狀況下咱們須要根據當前build的mode來決定生成的文件名,好比,若是使用debug模式,就在生成文件後面加d。那麼當載入這些文件的時候,咱們還須要手動添加這樣的話:
debug{
     MYFILE = $${NAME}_d.dll
}
release{
     MYFILE = $${NAME}.dll
}
每次用到都要寫這個,那就來一個函數好了。在QtCreator中的實現是這樣的:
正則表達式

defineReplace(qtLibraryName) {
   unset(LIBRARY_NAME)
   LIBRARY_NAME = $$1
   CONFIG(debug, debug|release) {
      !debug_and_release|build_pass {
          mac:RET = $$member(LIBRARY_NAME, 0)_debug
              else:win32:RET = $$member(LIBRARY_NAME, 0)d
      }
   }
   isEmpty(RET):RET = $$LIBRARY_NAME
   return($$RET)
}

添加預編譯頭

isEmpty(PRECOMPILED_HEADER):PRECOMPILED_HEADER = $$PWD/shared/***.h
相關文章
相關標籤/搜索