我們在編譯QT的工程的時候,一般都會讓qmake自動產生,但有時我們需要定製我們的工程,那麼就必須改寫pro檔案。
要自己全部寫pro檔案又有點麻煩,所以,一般都是先運行
qmake -project
來產生基本的pro檔案。
例如你有一個工程目錄為backup,那麼在這個目錄下就會產生backup.pro檔案。
對一般的工程,我們只需要修改幾個基本的常用的選項,下面說說怎麼修改。
假設我們有個目錄,名字為backup。下面有a.h,a.cpp,b.h,b.cpp,main.cpp等檔案。
首先我們可以在backup目錄下運行qmake -project產生backup.pro檔案。
888888888888888888888888888888888888888888888888888888888888888888
第一種常用方式:#模組設定,一般設定為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裡已經包含了幾個基本的選項,如
TEMPLATE,TARGET,INCLUDEPATH,HEADS,SOURCES等選項。
下面說明一下幾個經常修改的選項。
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可執行程式了