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的工程的時候,一般都會讓qmake自動生成,但有時我們需要定制我們的工程,那么就必須改寫pro文件。要自己全部寫pro文件又有點麻煩,所以,一般都是先運行

  `qmake -project`

來生成基本的pro文件。

例如你有一個工程目錄為backup,那么在這個目錄下就會生成backup.pro文件。對一般的工程,我們只需要修改幾個基本的常用的選項,下面說說怎么修改。假設我們有個目錄,名字為backup。下面有a.ha.cppb.hb.cppmain.cpp等文件。首先我們可以在backup目錄下運行qmake -project生成backup.pro文件。

第一種常用方式:

模塊設置,一般設置為app(生成應用程序,默認),subdirs(生成makefile文件編譯subdirs指定的子文件夾),lib(生成庫文件)

TEMPLATE = app

指定生成的應用程序放置的目錄

DESTDIR += ../bin

指定生成的應用程序名

TARGET = pksystem

添加或減少CONFIG的配置模塊,一般采用默認即可,但是除去debug_and_release模塊不會生成debug和release文件夾

CONFIG += release
CONFIG -= debug_and_release

指定uic命令將.ui文件轉化成ui_*.h文件的存放的目錄

UI_DIR += forms

指定rcc命令將.qrc文件轉換成qrc_*.h文件的存放目錄

RCC_DIR += ../tmp

指定moc命令將含Q_OBJECT的頭文件轉換成標准.h文件的存放目錄

MOC_DIR += ../tmp

指定目標文件的存放目錄

OBJECTS_DIR += ../tmp

程序編譯時依賴的相關路徑

DEPENDPATH += . forms include qrc sources

頭文件包含路徑

INCLUDEPATH += .

qmake時產生的信息,$${a}讀取變量a的字符串,$$(PATH)讀取環境變量PATH

message($$(PATH))

源文件編碼方式

CODECFORSRC = GBK
Input

工程中包含的頭文件

HEADERS += include/painter.h

工程中包含的.ui設計文件

FORMS += forms/painter.ui

工程中包含的源文件

SOURCES += sources/main.cpp sources/painter.cpp

工程中包含的資源文件

RESOURCES += qrc/painter.qrc


第二種常用方式,用於子文件夾的編譯:

設定模塊為子文件夾編譯方式

TEMPLATE = subdirs

子文件夾目錄,可用\換行

SUBDIRS = src1 \
                    src2

backup.pro里已經包含了幾個基本的選項,如
TEMPLATETARGETINCLUDEPATHHEADSSOURCES等選項。下面說明一下幾個經常修改的選項。

HEADS:

我們工程中頭文件如下:

HEADS += a.h \
                   b.h

SOURCES:

我們工程中的cpp文件,如下:

SOURCES += a.cpp \
                        b.cpp \
                        main.cpp

上面的兩個選項的文件分行是用反斜線\來分行,最后一個不用,如果是同一行的文件可以空格分開,我們在執行qmake -project的時候,qmake已經自動幫我們寫上了,省去我們這些麻煩,不過以后要增加文件可以在這里增加。

INCLUDEPATH:

這個選項可以指定我們#include語句要包含頭文件的目錄,如果你有其它的不在當前目錄的頭文件需要包含進來,並又不想在自己的源文件中使用絕對路徑或相對路徑來包含頭文件,那么我就可以在這里把這個頭文件所在的路徑包含進來,例如在backup目錄的兄弟目錄里有個目錄為image的目錄,里面有個頭文件為image.h,我們的b.h里要用到,因此我們在backup.pro文件中設置INCLUDEPATH

 `INCLUDEPATH += ../image`

這樣,我們在b.h里只需要#include "image.h"就可以了。

CONFIG:

CONFIG經常用到的一個是就是設置release版本或是debug或是release和debug的版本信息。如果我們要調試可以這樣設置。

`CONFIG += debug`

或`CONFIG += release (release版本)`

下面是CONFIG的幾個版本的選項:

  • release The project is to be built in release mode. This is ignored if debug is also specified.

  • debug The project is to be built in debug mode.

  • debug_and_release The project is built in both debug and release modes. This can have some unexpected side effects (see below for more information).

  • build_all If debug_and_release is specified, the project is built in both debug and release modes by default.

  • ordered When using the subdirs template, this option specifies that the directories listed should be processed in the order in which they are given.

  • precompile_header Enables support for the use of precompiled headers in projects.

  • warn_on The compiler should output as many warnings as possible. This is ignored if warn_off is specified.

  • warn_off The compiler should output as few warnings as possible.

LIBS:

這里可以選擇我們要包含的庫,例如我們的工程要用到libz.so的一個壓縮庫,我可以怎么寫:

LIBS += -lz

或是用到我們image目錄下的libimage.so庫,那么可以這么寫:

`LIBS += -L../image/image`

DEFINES:

DEFINES又是我們一個常用的定要,它相當於我們用gcc的-D定義。例如,我們的backup工程需要對大文件進行讀寫就可以這樣定義:

DEFINES += _LARGEFILE64_SOURCE _FILE_OFFSET_BITS=64

RESOURCES:

定義我們的資源描述文件,我們工程里需要很多圖片,那么這些圖片的定義都可以放在backup.qrc文件中進行描述,那么這里就可以指出我們的qrc文件。

RESOURCES += backup.qrc

TARGET:

這個選項可以讓我們定義我們生成的目標文件的名字,例如我們執行我們這個backup工程是默認生成backup的執行文件,但我們想讓我們的執行的文件名為abcbackup,我們就可以這樣寫

TARGET = abcbackup

OBJECTS_DIR:

一般我們在編譯我們的工程的時候會生成許多的中間文件,如.o文件(linux下).obj(windows下),這樣我們的工程就很亂,所以我們可以定義這個選擇,我們可以這樣定義:

OBJECTS_DIR += ./objs

這樣,我們的這些中間文件就全都在backup/objs目錄下了

一般,我們不會在我們的工程里直接編譯,這樣的話,工程比較亂,我們可以在backup目錄下建立一個目錄,為bakcup-build目錄,我們在這個目錄下編譯,這樣其他的臨時文件就在這個目錄下,這樣我們的工程看起來就不會那么亂了。

我們進入bakcup-build目錄,然后運行

         `qmake -o Makefile ../bakcup.pro`

這樣我們就在當前目錄下生成了一個Makefile。在這個目錄下執行make就可以生成我們的abcbackup可執行程序了
轉自: http://blog.csdn.net/metasearch/article/details/2148207


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM