1. 程式人生 > >QMAKESPEC環境變數詳解

QMAKESPEC環境變數詳解

相關知識

要講解QMAKESPEC環境變數的知識,先要了解如下知識

  • qmake
  • .pro專案檔案
  • makefile檔案

1.qmake

qmake是用來為不同的平臺的開發專案建立Makefile的Trolltech開發一個易於使用的工具。手寫Makefile是比較困難並且容易出錯的,尤其是需要給不同的平臺和編譯器組合寫幾個Makefile。qmake簡化了Makefile的生成,使用qmake,開發者建立一個簡單的專案檔案並且執行qmake生成適當的Makefile。qmake會注意所有的編譯器和平臺的依賴性,所以為了建立一個Makefile只需要一個只有幾行資訊的檔案(pro檔案),後面會介紹如何建立一個專案檔案。qmake可以供任何一個軟體專案使用,而不用管它是不是用Qt寫的,儘管它包含了為支援Qt開發所擁有的額外的特徵。qmake基於一個專案檔案這樣的資訊來生成Makefile。專案檔案可以由開發者生成。專案檔案通常很簡單,但是如果需要它是非常完善的。不用修改專案檔案,qmake也可以為Microsoft Visual Studio生成專案。

2. .pro專案檔案

一個專案檔案是用來告訴qmake關於為這個應用程式建立Makefile所需要的細節。例如,一個原始檔和標頭檔案的列表、任何應用程式特定配置、例如必需要連線的額外庫、或者一個額外的包含路徑,都應該放到專案檔案中。

3. makefile檔案

makefile關係到了整個工程的編譯規則。一個工程中的原始檔不計數,其按型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更復雜的功能操作,因為makefile就像一個Shell指令碼一樣,其中也可以執行作業系統的命令。makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成為了一種在工程方面的編譯方法。

當你已經建立好你的.pro專案檔案,生成Makefile就很容易了,你所要做的就是先到你所生成的專案檔案那裡然後輸入:Makefile可以像這樣由“.pro”檔案生成:
qmake -o Makefile hello.pro
對於Visual Studio的使用者,qmake也可以生成“.dsp”檔案,例如:
qmake -t vcapp -o hello.dsp hello.pro

下面進入主題講解QMAKESPEC環境變數

qmake需要一個平臺和編譯器描述檔案,其中包含許多預設值用於生成適當的Makefiles。標準的Qt發行版附帶了許多這些檔案,位於Qt安裝的子目錄mkspecs中。

該QMAKESPEC環境變數可以包含任何以下內容:

  • 包含qmake.conf檔案的目錄的完整路徑。在這種情況下,qmake將從qmake.conf該目錄中開啟檔案。如果檔案不存在,qmake將會退出並顯示錯誤。

  • 平臺 - 編譯器組合的名稱。在這種情況下,qmake將在由mkspecs編譯Qt時指定的資料路徑的子目錄指定的目錄中進行搜尋(請參閱QLibraryInfo :: DataPath)。

注:該QMAKESPEC路徑將被自動新增到INCLUDEPATH系統變數。

QMAKESPEC必須設定為你所使用的系統的平臺和編譯器的組合。 舉例來說,假如你使用的是Windows和Microsoft Visual Studio,你應該把環境變數設定為win32-msvc。如果你使用的是Solaris和g++,你應該把環境變數設定為solaris-g++。在qt/mkspecs中的每一個目錄裡面,都有一個包含了平臺和編譯器特定資訊的qmake.conf檔案。這些設定適用於你要使用qmake的任何專案,請不要修改它,除非你是一個專家。例如,假如你所有的應用程式都必須和一個特定的庫連線,你可以把這個資訊新增到相應的qmake.conf檔案中。當你在設定QMAKESPEC時,可以從下面的可能的環境變數列表中進行選擇:
aix-64 hpux-cc irix-032 netbsd-g++ solaris-cc unixware7-g++ aix-g++ hpux-g++ linux-cxx openbsd-g++ solaris-g++ win32-borland aix-xlc hpux-n64 linux-g++ openunix-cc sunos-g++ win32-g++ bsdi-g++ hpux-o64 linux-icc qnx-g++ tru64-cxx win32-msvc dgux-g++ hurd-g++ linux-kcc reliant-64 tru64-g++ win32-watc freebsd-g++ irix-64 macx-pbuilder reliant-cds ultrix-g++ win32-visa hpux-acc irix-g++ macx-g++ sco-g++ unixware-g hpux-acc irix-n32 solaris-64 unixware7-cc
envvar是下面之一時,環境變數應該被設定到qws/envvar:
linux-arm-g++ linux-generic-g++ linux-mips-g++ linux-x86-g++ linux-freebsd-g++ linux-ipaq-g++ linux-solaris-g++ qnx-rtp-g++