qmake-how to

簡單例子linux

假設已經實現以下程序:編程

hello.cpp
hello.h
main.cppwindows

首先,使用編輯器,在上述文件目錄下建立文件hello.pro.而後加入幾行語句告訴qmake項目中的源文件和頭文件。編輯器

使用 SOURCES 變量 加入源文件,例如:函數

SOURCES +=hello.cpp

加入全部源文件測試

SOURCES += hello.cpp
SOURCES += main.cpp

也可使用Make-like語法形式。以下:ui

SOURCES = hello.cpp\
          main.cpp

加入頭文件spa

HEADERS += hello.h
SOURCES +=hello.cpp
SOURCES += main.cpp

target 是自動設定的;就像project file 同樣。可是不一樣的平臺有不一樣的後綴。好比,若是project file 是 hello.pro,那麼在Windows上target就是 hello.exe,而linux上則是 hello.若是使用不一樣的名稱的話,能夠這樣設置project file:命令行

TARGET = helloworld

設置 CONFIG變量的最後一步。因爲是QT應用程序,必須把qt放入CONFIG中,這樣qmake就會生成相應的連接庫,並確保創建的moc和uic包含在生成的Makefile中。debug

最終的project file應該像這樣:

CONFIG +=qt
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

如今就可使用qmake來爲應用程序生成Makefile。在項目目錄下,輸入命令行,以下:

qmake -o Makefile hello.pro

而後根據使用的編譯器輸入make和nmake

對於Visual Studio用戶來講,qmake也會生成.dsp和.vcproj文件,好比:

qmake -tp vc hello.pro

 

使應用程序可調試

release版本的應用程序不包含任何調試符號或者其餘的調試信息。在開發過程當中每每須要調試版本提供相關的信息。這個很容易實現,只要在CONFIG變量中加入debug

例如:

CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

像以前同樣使用qmake產生Makefile,能夠在debugging環境下,運行程序,獲得有用的信息。

 

加入特定平臺的源文件

在經過幾個小時的編程後,有可能開始寫特定平臺部分,並且須要與其餘代碼獨立分開。有兩個新文件:hellowin.cpp和hellolinux.cpp.不能把它們都加入SOURCES變量中,這樣兩個文件都會在Makefile中。因此在運行qmake時,須要使用一個範圍根據獨立平臺來處理。

一個適用於windows的簡單範圍,以下:

win32{
      SOURCES += hellowin.cpp  
}

若是qmake運行在Windows上,將hellowin.cpp加入到源文件列表中。若是qmake運行在其餘平臺上,就會被忽略。

如今剩下的就是爲Unix-specific 文件建立一個範圍,以下:

CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
   SOURCES += hellowin.cpp
}
unix {
   SOURCES += hellounix.cpp
}

像以前同樣使用qmake生成Makefile

 

若是文件不存在中止qmake

若是某些文件不存在,可能就不想建立Makefile.可使用exists()函數來檢查文件是否存在。使用error()函數來中止qmake.這和scopes的效果是同樣的。簡單的使用函數來代替scope 條件

檢查main.cpp是否存在,以下:

!exists(main.cpp) {
  errror("No main.cpp file found")
}

!符號用來否認測試;例如,exists(main.cpp) 返回 true 則文件存在,若是 !exists(main.cpp)返回true,則文件不存在。

CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
 SOURCES += hellowin.cpp
}
unix {
 SOURCES += hellounix.cpp
}
!exists(main.cpp){
 error("No main.cpp file found")
}

像以前同樣生成makefile,若是重命名main.cpp,將會看到一些信息而且qmake會中止。

 

多條件檢查

假設使用Windows ,在命令行運行應用程序時,但願能看到qDebug()的聲明輸出。若是構建的應用程序沒有合適的控制設置,就不能看到輸出。只要在CONFIG中加入console,makefile中就會有設置。然而,若是debug已經加入了CONFIG中,想在運行時,加入console。須要使用嵌套範圍,例如:

win32 {
  debug {
    CONFIG +=console
}
}

嵌套範圍使用冒號連在一塊兒,最終的項目以下:

CONFIG += qt debug
HEADERS += hello.h
SOURCES +=hello.cpp
SOURCES += main.cpp
win32 {
  SOURCES += hellowin.cpp
}
unix {
  SOURCES += hellounix.cpp
}
!exists(main.cpp){
  error("No main.cpp file found")
}
win32:debug {
  CONFIG += console
}
相關文章
相關標籤/搜索