QT pro文件介紹

在QT中,有一個工具qmake能夠生成一個makefile文件,它是由.pro文件生成而來的,.pro文件的寫法以下:
1. 註釋
從「#」開始,到這一行結束。
2. 指定源文件
SOURCES = *.cpp
對於多源文件,可用空格分開,如:SOURCES = 1.cpp 2.cpp3.cpp
或者每個文件能夠被列在一個分開的行裏面,經過反斜線另起一行,就像這樣:
SOURCES = hello.cpp
     main.cpp
一個更冗長的方法是單獨地列出每個文件,就像這樣:
    SOURCES+= hello.cpp
    SOURCES +=main.cpp
這種方法中使用「+=」比「=」更安全,由於它只是向已有的列表中添加新的文件,而不是替換整個列表。
3. 指定頭文件
HEADERS = hello.h或者HEADERS += hello.h
列出源文件的任何一個方法對頭文件也都適用。
4. 配置信息
CONFIG用來告訴qmake關於應用程序的配置信息。
    CONFIG+= qt warn_on release
在這裏使用「+=」,是由於咱們添加咱們的配置選項到任何一個已經存在中。這樣作比使用「=」那樣替換已經指定的全部選項是更安全的。
A> qt部分告訴qmake這個應用程序是使用Qt來連編的。這也就是說qmake在鏈接和爲編譯添加所需的包含路徑的時候會考慮到Qt庫的。
B> warn_on部分告訴qmake要把編譯器設置爲輸出警告信息的。
C> release部分告訴qmake應用程序必須被連編爲一個發佈的應用程序。在開發過程當中,程序員也可使用debug來替換release
5. 指定目標文件名
TARGET = filename
若是不設置該項目,目標名會被自動設置爲跟項目文件同樣的名稱
6. 添加界面文件(ui)
INTERFACES = filename.ui
7. 平臺相關性處理
咱們在這裏須要作的是根據qmake所運行的平臺來使用相應的做用域來進行處理。爲Windows平臺添加的依賴平臺的文件的簡單的做用域看起來就像這樣:
win32 {
SOURCES += hello_win.cpp
}
因此若是qmake運行在Windows上的時候,它就會把hello_win.cpp添加到源文件列表中。若是qmake運行在其它平臺上的時候,它會很簡單地把這部分忽略。
8. 若是一個文件不存在,中止qmake
若是某一個文件不存在的 時候,你也許不想生成一個Makefile。咱們能夠經過使用exists()函數來檢查一個文件是否存在。咱們能夠經過使用error()函數把正在運 行的qmake停下來。這和做用域的工做方式同樣。只要很簡單地用這個函數來替換做用域條件。對main.cpp文件的檢查就像這樣:
!exists( main.cpp ) {
  error( "No main.cpp file found")
}
「!」用來否認這個測試,好比,若是文件存在,exists( main.cpp)是真,若是文件不存在,!exists( main.cpp )是真。
9. 檢查多於一個的條件
假設你使用Windows而且當你在命令 行運行你的應用程序的時候你想可以看到qDebug()語句。除非你在連編你的程序的時候使用console設置,你不會看到輸出。咱們能夠很容易地把 console添加到CONFIG行中,這樣在Windows下,Makefile就會有這個設置。可是若是告訴你咱們只是想在當咱們的應用程序運行在 Windows下而且當debug已經在CONFIG行中的時候,添加console。這須要兩個嵌套的做用域;只要生成一個做用域,而後在它裏面再生成 另外一個。把設置放在最裏面的做用域裏,就像這樣:
win32 {
  debug {
     CONFIG += console
  }
}
嵌套的做用域可使用冒號鏈接起來,像這樣:
win32:debug {
CONFIG += console
}
10. 摸板
模板變量告訴qmake爲這個應用程序生成哪一種makefile。下面是可供使用的選擇:
A> app -創建一個應用程序的makefile。這是默認值,因此若是模板沒有被指定,這個將被使用。
B> lib - 創建一個庫的makefile。
C> vcapp - 創建一個應用程序的VisualStudio項目文件。
D> vclib - 創建一個庫的VisualStudio項目文件。
E> subdirs -這是一個特殊的模板,它能夠建立一個可以進入特定目錄而且爲一個項目文件生成makefile而且爲它調用make的makefile。
11. 生成Makefile
當你已經建立好你的項目文件,生成Makefile就很容易了,你所要作的就是先到你所生成的項目文件那裏而後輸入:
Makefile能夠像這樣由「.pro」文件生成:
    qmake -oMakefile hello.pro
對於VisualStudio的用戶,qmake也能夠生成「.dsp」文件,例如:
    qmake -tvcapp -o hello.dsp hello.pro




 Qt pro工程文件 介紹


    分類:Qt/C++


app - 創建一個應用程序的makefile。這是默認值,因此若是模板沒有被指定,這個將被使用。


lib - 創建一個庫的makefile。


vcapp - 創建一個應用程序的Visual Studio項目文件。


vclib - 創建一個庫的Visual Studio項目文件。


subdirs - 這是一個特殊的模板,它能夠建立一個可以進入特定目錄而且爲一個項目文件生成makefile而且爲它調用make的makefile。


「app」模板
「app」模板告訴qmake爲創建一個應用程序生成一個makefile。當使用這個模板時,下面這些qmake系統變量是被認可的。你應該在你的.pro文件中使用它們來爲你的應用程序指定特定信息。


HEADERS - 應用程序中的全部頭文件的列表。


SOURCES - 應用程序中的全部源文件的列表。


FORMS - 應用程序中的全部.ui文件(由Qt設計器生成)的列表。


LEXSOURCES - 應用程序中的全部lex源文件的列表。


YACCSOURCES - 應用程序中的全部yacc源文件的列表。


TARGET - 可執行應用程序的名稱。默認值爲項目文件的名稱。(若是須要擴展名,會被自動加上。)


DESTDIR - 放置可執行程序目標的目錄。


DEFINES - 應用程序所需的額外的預處理程序定義的列表。


INCLUDEPATH - 應用程序所需的額外的包含路徑的列表。


DEPENDPATH - 應用程序所依賴的搜索路徑。


VPATH - 尋找補充文件的搜索路徑。


DEF_FILE - 只有Windows須要:應用程序所要鏈接的.def文件。


RC_FILE - 只有Windows須要:應用程序的資源文件。


RES_FILE - 只有Windows須要:應用程序所要鏈接的資源文件。


CONFIG變量
配置變量指定了編譯器所要使用的選項和所須要被鏈接的庫。配置變量中能夠添加任何東西,但只有下面這些選項能夠被qmake識別。


下面這些選項控制着使用哪些編譯器標誌:


release - 應用程序將以release模式連編。若是「debug」被指定,它將被忽略。


debug - 應用程序將以debug模式連編。


warn_on - 編譯器會輸出儘量多的警告信息。若是「warn_off」被指定,它將被忽略。


warn_off - 編譯器會輸出儘量少的警告信息。


下面這些選項定義了所要連編的庫/應用程序的類型:


qt - 應用程序是一個Qt應用程序,而且Qt庫將會被鏈接。


thread - 應用程序是一個多線程應用程序。


x11 - 應用程序是一個X11應用程序或庫。


windows - 只用於「app」模板:應用程序是一個Windows下的窗口應用程序。


console - 只用於「app」模板:應用程序是一個Windows下的控制檯應用程序。


dll - 只用於「lib」模板:庫是一個共享庫(dll)。


staticlib - 只用於「lib」模板:庫是一個靜態庫。


plugin - 只用於「lib」模板:庫是一個插件,這將會使dll選項生效。


例如,若是你的應用程序使用Qt庫,而且你想把它連編爲一個可調試的多線程的應用程序,你的項目文件應該會有下面這行:


    CONFIG += qt thread debug注意,你必須使用「+=」,不要使用「=」,不然qmake就不能正確使用連編Qt的設置了,好比無法得到所編譯的Qt庫的類型了。


 


qmake高級概念
操做符


「=」操做符      分配一個值給一個變量
「+=」操做符     向一個變量的值的列表中添加一個值
「-=」操做符      從一個變量的值的列表中移去一個值
「*=」操做符      僅僅在一個值不存在於一個變量的值的列表中的時候,把它添加進去
「~=」操做符      替換任何與指定的值的正則表達式匹配的任何值 DEFINES ~= s/QT_[DT].+/QT
做用域
win32:thread {
        DEFINES += QT_THREAD_SUPPORT    } else:debug {        DEFINES += QT_NOTHREAD_DEBUG    } else {        warning("Unknown configuration")    }    }變量
到目前爲止咱們遇到的變量都是系統變量,好比DEFINES、SOURCES和HEADERS。你也能夠爲你本身建立本身的變量,這樣你就能夠在做用域中使用它們了。建立本身的變量很容易,只要命名它而且分配一些東西給它。好比:


    MY_VARIABLE = value你也能夠經過在其它任何一個變量的變量名前加$$來把這個變量的值分配給當前的變量。例如:


   MY_DEFINES = $$DEFINESMY_DEFINES = $${DEFINES}
第 二種方法容許你把一個變量和其它變量鏈接起來,而不用使用空格。qmake將容許一個變量包含任何東西(包括$(VALUE),能夠直接在 makefile中直接放置,而且容許它適當地擴張,一般是一個環境變量)。不管如何,若是你須要當即設置一個環境變量,而後你就可使用$$()方法。 好比:


    MY_DEFINES = $$(ENV_DEFINES)這將會設置MY_DEFINES爲環境變量ENV_DEFINES傳遞給.pro文件地值。另外你能夠在替換的變量裏調用內置函數。這些函數(不會和下一節中列舉的測試函數混淆)列出以下:


join( variablename, glue, before, after )
這 將會在variablename的各個值中間加入glue。若是這個變量的值爲非空,那麼就會在值的前面加一個前綴before和一個後綴after。只 有variablename是必須的字段,其它默認狀況下爲空串。若是你須要在glue、before或者after中使用空格的話,你必須提供它們。


member( variablename, position )
這將會放置variablename的列表中的position位置的值。若是variablename不夠長,這將會返回一個空串。variablename是惟一必須的字段,若是沒有指定位置,則默認爲列表中的第一個值。


find( variablename, substr )
這將會放置variablename中全部匹配substr的值。substr也能夠是正則表達式,而所以將被匹配。


    MY_VAR = one two three four    MY_VAR2 = $$join(MY_VAR, " -L", -L) -Lfive    MY_VAR3 = $$member(MY_VAR, 2) $$find(MY_VAR, t.*)MY_VAR2將會包含「-Lone -Ltwo -Lthree -Lfour -Lfive」,而且MYVAR3將會包含「three two three」。


system( program_and_args )
這將會返回程序執行在標準輸出/標準錯誤輸出的內容,而且正像平時所期待地分析它。好比你可使用這個來詢問有關平臺的信息。


    UNAME = $$system(uname -s)    contains( UNAME, [lL]inux ):message( This looks like Linux ($$UNAME) to me )測試函數
qmake提供了能夠簡單執行,但強大測試的內置函數。這些測試也能夠用在做用域中(就像上面同樣),在一些狀況下,忽略它的測試值,它本身使用測試函數是頗有用的。


contains( variablename, value )
若是value存在於一個被叫作variablename的變量的值的列表中,那麼這個做用域中的設置將會被處理。例如:


    contains( CONFIG, thread ) {        DEFINES += QT_THREAD_SUPPORT    }若是thread存在於CONFIG變量的值的列表中時,那麼QT_THREAD_SUPPORT將會被加入到DEFINES變量的值的列表中。


count( variablename, number )
若是number與一個被叫作variablename的變量的值的數量一致,那麼這個做用域中的設置將會被處理。例如:


    count( DEFINES, 5 ) {        CONFIG += debug    }error( string )
這個函數輸出所給定的字符串,而後會使qmake退出。例如:


    error( "An error has occured" )文本「An error has occured」將會被顯示在控制檯上而且qmake將會退出。


exists( filename )
若是指定文件存在,那麼這個做用域中的設置將會被處理。例如:


    exists( /local/qt/qmake/main.cpp ) {        SOURCES += main.cpp    }若是/local/qt/qmake/main.cpp存在,那麼main.cpp將會被添加到源文件列表中。


注意能夠不用考慮平臺使用「/」做爲目錄的分隔符。


include( filename )
項目文件在這一點時包含這個文件名的內容,因此指定文件中的任何設置都將會被處理。例如:


     include( myotherapp.pro )myotherapp.pro項目文件中的任何設置如今都會被處理。


isEmpty( variablename )
這和使用count( variablename, 0 )是同樣的。若是叫作variablename的變量沒有任何元素,那麼這個做用域中的設置將會被處理。例如:


    isEmpty( CONFIG ) {        CONFIG += qt warn_on debug    }message( string )
這個函數只是簡單地在控制檯上輸出消息。


    message( "This is a message" )文本「This is a message」被輸出到控制檯上而且對於項目文件的處理將會繼續進行。


system( command )
特定指令被執行而且若是它返回一個1的退出值,那麼這個做用域中的設置將會被處理。例如:


    system( ls /bin ) {        SOURCES += bin/main.cpp        HEADERS += bin/main.h    }因此若是命令ls /bin返回1,那麼bin/main.cpp將被添加到源文件列表中而且bin/main.h將被添加到頭文件列表中。


infile( filename, var, val )
若是filename文件(當它被qmake本身解析時)包含一個值爲val的變量var,那麼這個函數將會返回成功。你也能夠不傳遞第三個參數(val),這時函數將只測試文件中是否分配有這樣一個變量var。


如下爲個人一個項目舉例
# 項目目標:爲一個庫文件


TEMPLATE = lib# 編譯項目文件所需頭文件的路徑INCLUDEPATH += ../common .# 目標文件路徑DESTDIR=../lib# 條件依賴:Unix平臺上 定義本想目的 UI目錄, MOC目錄, 目的目錄unix {  UI_DIR = ../.ui  MOC_DIR = ../.moc  OBJECTS_DIR = ../.obj}# 本項目配置:CONFIG         += qt warn_on release thread# Input  頭文件,源文件HEADERS += COMControllerThread.h            DecodeSMS.h            monitor_common.h            monitor_interface.h            MonitorThread.h            UserEvent.h            MyCOM.h            MySMS.h            MyTagHandle.h            SMSParseThread.h            tag_dict.hSOURCES += COMControllerThread.cpp            DecodeSMS.cpp            monitor_common.cpp            monitor_interface.cpp            MonitorThread.cpp            MyCOM.cpp            MySMS.cpp            MyTagHandle.cpp            SMSParseThread.cpp            tag_dict.cpp注:qmake -project 能夠生成pro文件(能夠根據項目須要,編輯改文件)
qmake 能夠生成Makefile文件
make 編譯
使用qmake -project時,會把本目錄及其子目錄內全部.cpp .h文件加入到項目輸入文件中,使用是注意移去其餘無用的文件。
qmake生成的Makefile文件,能夠根據須要作相應修改

本文同步分享在 博客「錢塘小甲子」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。程序員

相關文章
相關標籤/搜索